递归比较和删除(无需 rsync 或哈希)

递归比较和删除(无需 rsync 或哈希)

我一直在使用 rsync 来同步文件夹,效果很好。问题是,最近我开始同步其中包含较大文件的文件夹,并且它花费的时间比我希望的要长得多(由于其哈希比较)。我注意到 cp 命令可以通过调用 -u 选项更快地完成 rsyncs 工作的一部分。这意味着可以使用此方法轻松地将源中的较新文件添加到目标。

但我需要弄清楚的是 rsync 作业的第二部分,我发现它很有用。这是一个命令,可以递归地比较所有文件夹中的文件列表,并删除那些不再在源中出现但仍在目标中的文件(但不对所有文件执行哈希,使用例如,ls 命令足以满足我的需求)。

这可能吗?

答案1

这将(假装)删除文件夹之间的任何差异:

diff -awr folderA folderB | sed 's/Only in //;s/: /\//' | while read f; do echo "removing ${f}"; done;

如果你想删除 A 中的差异而不是 B 中的差异,你可以像这样添加 grep :

diff -awr folderA folderB | sed 's/Only in //;s/: /\//' | grep "^folderA/" | while read f; do echo "removing ${f}"; done;

请注意,您必须为此命令在命令中输入两次folderA

要真正运行它,只需替换echo "removing ${f}";rm -f "${f}";

答案2

您可以参考这个链接这个链接。 rsync 具有删除 .rsync 上不存在的文件夹的功能live ENV

rsync -av --delete

相关内容