目标服务器文件已移动并且 Rsync 再次复制相同的文件

目标服务器文件已移动并且 Rsync 再次复制相同的文件

我使用了rsync很长时间,它按照要求完美工作,但我遇到了一种情况,目标服务器文件每隔几秒钟移动一次,并rsync从本地 sftp 服务器再次复制相同的文件。我正在使用--ignore-existing命令,但在这种情况下它也不起作用。

sshpass -p "ABCDE" rsync   -avvtzh   --ignore-existing -e  "ssh -o StrictHostKeyChecking=no"  --log-file="/home/toor/log/uc.log"   [email protected]:share/CACHEDEV1_DATA/Lanein1/Unicard/ /home/toor/UCDownloads/

答案1

如果目标文件已被移动,那么就其而言,rsync它们不再存在。该--ignore-existing标志没有用,因为文件不存在于预期的位置,因此没有什么可以忽略的。

您可以创建一个标志文件,并仅推送自上次成功rsync运行以来修改的文件。像这样的骨架可以工作(它比您想象的更复杂,因为文件的源位于您的远程系统而不是本地):

path='/share/CACHEDEV1_DATA/Lanein1/Unicard'
flag="$path.flag"

# Must have a flag file. If we don't then create one from the epoch
if ssh -nq [email protected] "[ ! -f '$flag' ]"
then
    touch -t 197001010000 /tmp/1970
    scp -p /tmp/1970.flag [email protected]:"$flag"
    rm -f /tmp/1970.flag
fi

# Flag the start of the synchronisation
ssh -nq [email protected] "date >'$flag.tmp'"

# Copy files newer than the flag
if ssh -nq [email protected] "find '$path/' -depth -newer '$flag' -print0 |
    rsync -avz --files-from - --from0 [email protected]:/ /home/toor/UCDownloads/
then
    # Install the new flag
    ssh -nq [email protected] "mv -f '$flag.tmp' '$flag'"
fi

对于那些不熟悉 QNAP 的人来说,该touch命令并不作为标准存在,并且rsync其功能被削减。我在本地客户端上使用它touch创建了一个日期为 1970-01-01 的文件,然后将其作为初始标志传输到远程系统。 (如果touch存在于远程系统上,那么首先远程创建该文件会容易得多。)find仅包括自标记日期以来创建/修改的文件和目录。

相关内容