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 范围有很好的解释。