如何进行“如果更改则复制”操作?

如何进行“如果更改则复制”操作?

我想将一组文件从目录 A 复制到目录 B,但需要注意的是,如果目录 A 中的文件与目录 B 中的文件相同,则不应复制该文件(因此其修改时间不应为更新)。有没有一种方法可以使用现有工具来做到这一点,而无需编写自己的脚本来做到这一点?

详细说明我的用例:我.c在临时目录中自动生成一堆文件(通过必须无条件生成所有文件的方法),当我重新生成它们时,我只想复制已更改为实际源目录的目录,而未更改的目录保持不变(及其旧的创建时间),以便make知道不需要重新编译它们。 (不过,并非所有生成的文件都是.c文件,因此我需要进行二进制比较而不是文本比较。)

(注:这源于我提出的问题https://stackoverflow.com/questions/8981552/speeding-up-file-comparions-with-cmp-on-cygwin/8981762#8981762,我试图加快我用来执行此操作的脚本文件的速度,但我突然想到,我真的应该问是否有比编写自己的脚本更好的方法来执行此操作 - 特别是因为任何简单的方法在 shell 脚本中执行此操作将cmp在每对文件上调用类似的操作,并且启动所有这些进程需要很长时间。)

ベストアンサー1

您可以使用-u开关来cp像这样:

$ cp -u [source] [destination]

从手册页:

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

おすすめ記事