我正在使用rsync脚本进行目录复制.我让它只同步新的和修改过的文件或目录,但我不喜欢它复制重命名的文件或目录作为新文件或目录,保持文件不同步.我还设置了1MB的带宽限制,因为这将在营业时间运行.这是我的脚本:
rsync -zvru --bwlimit=1024 /mymounts/test1/ /mymounts/test2
如果有人重命名某些内容,仍然只复制新文件或修改过的文件,如何保持文件和目录同步?这是有问题的文件
ls "/mymounts/test1/some stuff" new directory newfile1.txt newfile3.txt renamedFile.txt ls "/mymounts/test2/some stuff" new directory newfile1.txt newfile2.txt newfile3.txt renamedFile.txt
解决方法
如果源目录和目标目录上的文件系统支持硬链接,则可以使用rsync处理移动和重命名的文件.我们的想法是让rsync在真正传输之前重建硬链接.你可以找到
a brilliant explanation here.
我们最终得到了一个简单的解决方案,在源/目标目录中创建一个隐藏的硬链接树,基本脚本可能是这样的:
# Name of hidden directory Shadow=".rsync_shadow" # do real sync rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target" # update/create hidden dir of hard links in source rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow" # update/create hidden dir of hard links in target rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"
我有an example script on GitHub.但我建议你在生产之前使用这种方法进行大量的测试.