比较 2 个目录并复制第 3 个目录中的差异

per*_*lis 34 linux rsync directory diff

运行 ubuntu 12.04,我想比较 2 个目录,比如 folder1/ 和 folder2/,并复制与 folder3/ 不同的任何文件。还有嵌套文件,因此也应复制匹配的子目录

有没有一个命令可以帮助我?我可以获得正在运行的已更改文件的完整列表:

rsync -rcnC --out-format="%f" folder1/ folder2/
Run Code Online (Sandbox Code Playgroud)

但是 rsync 似乎没有能力将这些文件“导出”到不同的目标目录。我可以将列表通过管道传输到 cp 或其他一些程序,以便复制文件,同时创建目录吗?例如,我试过

rsync -rcnC --out-format="%f" folder1/ folder2/ | xargs cp -t folder3/
Run Code Online (Sandbox Code Playgroud)

但这也不会保留目录,它只会复制 folder3/ 中的所有文件

小智 45

使用 --compare-dest。

从手册页:

--compare-dest=DIR - 此选项指示 rsync 使用目标计算机上的 DIR 作为附加层次结构,以将目标文件与正在传输的文件进行比较(如果目标目录中缺少文件)。如果在 DIR 中找到与发件人文件相同的文件,则该文件将不会传输到目标目录。这对于创建仅从早期备份更改的文件的稀疏备份很有用。

首先使用 --dry-run 检查您的语法

rsync -aHxv --progress --dry-run --compare-dest=folder2/ folder1/ folder3/
Run Code Online (Sandbox Code Playgroud)

然后,一旦您对输出感到满意:

rsync -aHxv --progress  --compare-dest=folder2/ folder1/ folder3/
Run Code Online (Sandbox Code Playgroud)

链接对 --compare-dest 范围有很好的解释。

  • 对我来说,`--compare-dest` 需要一个绝对路径。 (5认同)
  • 谢谢你,我不明白这个参数的手册页解释。对于任何感兴趣的人,我用“rsync -rcC --compare-dest=folder2/folder1/folder3/”来完成 (2认同)