我有两个目录,分别称为“源”和“目标”,它们有一些共同的文件。其中一个目录中也有一些文件,而另一个目录中没有。当且仅当 (1) 两个目录中都存在同名文件,并且 (2) 文件内容不同时,我才想将文件从“源”复制到“目标”。
“内容不同”的标准很简单:rsync --checksum -av source/ dest/
。但我不知道如何做“仅当两个文件中都存在同名文件时”的部分。
我有两个目录,分别称为“源”和“目标”,它们有一些共同的文件。其中一个目录中也有一些文件,而另一个目录中没有。当且仅当 (1) 两个目录中都存在同名文件,并且 (2) 文件内容不同时,我才想将文件从“源”复制到“目标”。
“内容不同”的标准很简单:rsync --checksum -av source/ dest/
。但我不知道如何做“仅当两个文件中都存在同名文件时”的部分。
使用
--existing
开关。从手册页中:例如
rsync --checksum --existing -av source/ dest/
我读了手册页后发现,这将满足您的要求:
该
--existing
选项描述为skip creating new files on receiver
。该
--no-delete
选项包含在列出的注释中--no-OPTION
,描述为turn off an implied OPTION
。因此--no-delete
将禁用描述为的选项组This tells rsync to delete extraneous files from the receiving side (ones that aren't on the sending side)
。-av
我还交换了和选项的顺序,--checksum
以确保校验和覆盖-t
由启用的-a
。手册页中有几处强调了将覆盖选项放在宏选项之后的重要性,例如-a
。阅读手册页中有关该
--delete
选项的详细描述部分,因为删除/避免删除不是 rsync 最简单的主题。我会尝试类似的事情:
dest
类似于:
你也
--files-from
可以尝试--include-from=FILE