我将以下问题发布到了 stackoverflow,但人们建议我发布到这里:
我有两个目录dirA
和dirB
。我想将dirB
其中与不同dirA
(校验和不同,而不是 mod-times)的所有内容移动到新目录 dirC。
我正在查看rsync -c
命令,但它似乎rsync
只能从一个目录复制到另一个目录,而不是比较然后复制到新目录。
我还可以编写一个长脚本来diff -qr
获取文件名,然后分析输出并相应地复制出文件,但我真的想避免解析任何内容(这就是需要测试和调试的地方)。
如何才能可靠地做到这一点?
答案1
您必须使用该--compare-dest
选项。从手册:
–比较目标=DIR:
此选项指示 rsync 使用目标计算机上的 DIR 作为附加层次结构来比较目标文件和进行传输(如果目标目录中缺少文件)。如果在 DIR 中找到与发送方文件相同的文件,则不会将该文件传输到目标目录。这对于创建仅包含与早期备份相比已更改的文件的稀疏备份非常有用。
你的命令将会是这样的:
rsync -aHxvc --progress --compare-dest=dirA/ dirB/ dirC/
(我为您选择了常用标志aHvx
,请检查这些标志是否适合您的需求)。在运行此程序之前,最好运行命令
rsync -aHxvc --dry-run --progress --compare-dest=dirA/ dirB/ dirC/
它将向您显示将要执行的操作,而无需实际执行这些操作:它使您有机会控制命令是否真正按照您的意愿执行。