如何比较两个目录中的所有文件并将不同的文件复制到另一个目录?例如,假设我们有目录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
它们而不是cp
ing。
答案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
笔记:
- 始终将更新的目录放在第一位。 (从上面的示例:
cp -pu dir1/* dir2/* dir3/
不会复制更新的文件) dir3
必须存在。