linux 在多个目录中查找受 MAX TOTAL SIZE 限制

问题描述 投票:0回答:1

我的 5TB 硬盘中有两个目录:

  • 文件夹A
  • 文件夹B

我需要在另一个HDD中rclone同步或rsync这两个目录,但存储限制为2TB。

因此,我决定仅同步“最新”文件和“最新”删除,如果没有空间容纳最新文件,则删除 2TB 上最旧的文件。 我需要一个查找命令:

  1. 查找(我猜是使用 find 或 ls)这两个目录中的所有文件,按日期 DESC 排序
  2. 将命令的输出限制为 MAX TOTAL FILE SIZE 2TB
  3. 将结果输出到文件或管道以进行 rsync 或 rclone 同步

我已经尝试使用 rclone 同步命令:

MAX_TRANSFER=$(df -Bg /var/HDD| awk '{print $2}' |tail -1|sed 's/%$//g')

/usr/bin/rclone -v --config /home/user/.config/rclone/rclone.conf sync remote:/dir /var/HDD --include='/{folderA,folderB}/**' --order-by 'modtime,descending' --max-transfer $MAX_TRANSFER --check-first --delete-before --size-only --progress --transfers=1

其中 MAX_TRANSFER 是我的 HDD 的总大小

但这不起作用,因为 rclone 在达到 2TB 时会自行停止,而不同步最新文件并删除最旧的文件。我需要这个“镜像”HDD 始终与 5TB HDD 上创建的最新文件同步。

linux find rsync ls rclone
1个回答
0
投票

我用这个shell脚本解决了它。

#!/bin/bash
nc -z 192.168.1.10 22 > /dev/null
if [ $? -eq 1 ]; then
        echo "Host is offline. Skipping sync."
else
        echo "Host is online. Starting sync."

        rm /tmp/syncDir.tmp 2> /dev/null
        rm /tmp/syncDir.txt 2> /dev/null

        MAX_TRANSFER=$(df /home/user/Dir | awk '{print $2}' |tail -1|sed 's/%$//g')
        MAX_TRANSFER=$(($MAX_TRANSFER * 1000))

        /usr/bin/rclone -v --config /home/user/.config/rclone/rclone.conf lsf userpc:/mnt/s/Dir --include='/{folderA,folderA}/**' --order-by 'modtime,descending' --recursive --files-only --format sp --separator "|||" >> /tmp/syncDir.tmp
        total_size=0

        while IFS="" read -r IN || [ -n "$IN" ]
        do
                arrIN=(${IN//|||/ })
                size=${arrIN[0]}
                total_size=$(($total_size + $size))
                if [ $total_size -lt $MAX_TRANSFER ]; then
                        echo -e "$IN" >> /tmp/syncDir.txt
                fi
        done < /tmp/syncDir.tmp

        sed -i 's/^.*|||//' /tmp/syncDir.txt

        /usr/bin/rclone -v --config /home/user/.config/rclone/rclone.conf sync userpc:/mnt/s/Dir /home/user/Dir --files-from=/tmp/syncDir.txt --order-by 'modtime,descending' --check-first --delete-before --size-only --progress --transfers=3
        rm /tmp/syncDir.tmp 2> /dev/null
        rm /tmp/syncDir.txt 2> /dev/null
fi
© www.soinside.com 2019 - 2024. All rights reserved.