比较两个目录中的每个文件,如果与对应文件不同,则将其复制到另一个目录

比较两个目录中的每个文件,如果与对应文件不同,则将其复制到另一个目录

如何比较两个目录中的所有文件并将不同的文件复制到另一个目录?例如,假设我们有目录1目录2:

dir1:
     build.gradle
     gradle.properties
     somejar.jar
     javacode.java
     anotherjar.jar

dir2:
     build.gradle      <-- different from build.gradle in dir1
     gradle.properties
     somejar.jar
     javacode.java     <-- different from javacode.java in dir1
     yetanotherjar.jar

我怎样才能创建一个新目录目录3其中包含来自的不同文件目录2, 中的公共文件目录1目录2以及两者中的所有不常见文件目录1目录2目录3应包含:

dir3:
     build.gradle      <-- from dir2
     gradle.properties <-- these are common files both in dir1 and dir2
     somejar.jar       <--
     javacode.java     <-- from dir2
     anotherjar.jar    <-- from dir1
     yetanotherjar.jar <-- from dir2

答案1

所有你需要的是

cp -n dir2/* dir1/* dir3/

答案2

我是否正确理解您的意思,应该包含两个基本目录中的所有文件,并且如果一个文件出现在两个目录中,则应该采用dir3其中的一个?dir2然后一个简单的

cp dir1/* dir3/
cp dir2/* dir3/

应该可以解决这个问题:两个源目录中不同的文件将被dir2.如果您不想将相同的文件复制两次,您也可以复制rsync它们而不是cping。

答案3

cp -pu dir2/* dir1/* dir3/

来自男人:

-p    same as --preserve=mode,ownership,timestamps
-u    copy only when the SOURCE file is  newer  than  the  destination
      file or when the destination file is missing

笔记:

  1. 始终将更新的目录放在第一位。 (从上面的示例:cp -pu dir1/* dir2/* dir3/不会复制更新的文件)
  2. dir3必须存在。

相关内容