如何将不同的内容文件从一个目录复制到另一个目录?

时间:2017-01-13 16:07:39

标签: linux command-line directory diff cp

有两个目录:a/b/ 我想将所有文件(递归地)从a/复制到b/
但是,如果文件的内容与现有的a文件不同,我只想复制b文件。如果相应的b文件不存在,那么您仍然可以复制a文件。

* by"相应的文件",我的意思是一个与父目录具有相同名称和相对路径的文件。

注意:的 我不想覆盖具有相同内容的b文件的原因是因为b目录正被另一个程序监控,我不想要该文件更改日期导致程序执行超出要求的更多工作。

我基本上在寻找一种在对每个文件执行差异检查时执行cp -rf a/ b/的方法。如果文件不同,请执行复制;否则跳过副本。

我看到cp有更新标记:

   -u, --update
          copy only when the SOURCE file is newer than the destination  file  or  when  the
          destination file is missing

但这不起作用,因为我并不关心较新的文件;我关注不同的文件内容。

任何shell语言都可以 我一直试图通过将diff检查注入find命令来实现这一点:

find a/ ??? -exec cp {} b \;

这在两个目录之间似乎并不常见,所以我希望有一个优雅的命令行解决方案,因为我必须编写一个python脚本。

1 个答案:

答案 0 :(得分:1)

您可以使用 rsync 来实现此目的。仅当源文件夹中有任何新更新时,才会更新文件或目录。

$rsync -av --progress sourcefolder destinationfolder