我的 5TB 硬盘中有两个目录:
我需要在另一个HDD中rclone同步或rsync这两个目录,但存储限制为2TB。
因此,我决定仅同步“最新”文件和“最新”删除,如果没有空间容纳最新文件,则删除 2TB 上最旧的文件。 我需要一个查找命令:
我已经尝试使用 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 上创建的最新文件同步。
我用这个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