如何在两个不同的文件夹中选择相同的文件

如何在两个不同的文件夹中选择相同的文件

我正在尝试编译 CyanogenMod,在供应商文件中,我必须手动找到相同的文件,然后复制它们。在一个文件夹中,有 400 多个文件,逐个复制它们非常困难。

我在想是否有办法选择两个文件夹中的公共文件?这会让我的生活变得轻松很多。

答案1

你可能正在寻找的是:

rsync -a --existing source/ destination

此处,该--existing选项确保仅从目录中destination复制目录中已存在的文件source

-a使复制递归并保留符号链接、特殊文件和设备文件、修改时间、组、所有者和权限

如果您想进行试运行以查看将复制的内容,请使用:

rsync -nav --existing source/ destination

无论哪种情况,请注意指定目标目录后没有斜杠。

答案2

在命令行中您可以使用 MV 命令和一些通配符。

将目录子目录中的所有文件移动到此处

mv dir/*/* here   

相同,但仅以前缀开头的文件

mv dir/*/prefix* here

答案3

如果您必须查找相同的文件,也可以查看fdupes,并解析其输出。它会检查两个(或多个)文件是否真的相同,即使它们的文件名不同。

您可以将它与比较文件名的工具结合起来。

(旁注:使用fdupes删除冗余文件可能会很危险 - 例如翻录的 DVD。每个 DVD 轨道都有一个字幕文件及其备份,它们是相同的,但具有不同的文件名后缀。如果其中一个文件丢失,VLC 播放器将无法播放 DVD。所以我必须重建这些文件...)

答案4

解决方案:

diff -sqr dir1 dir2 | grep identical | awk '{print $2}'

解释:

diff可以通过文件名输出差异。示例

diff -sqr dir1 dir2

Files dir1/fileX.txt and dir2/fileY.txt differ
Only in dir1: griveTest.txt
Files dir1/Test.odt and dir2/Test.odt are identical

要仅获取相同的文件,请使用 grep:

diff -sqr dir1 dir2 | grep identical 

Files dir1/Test.odt and dir2/Test.odt are identical

现在仅获取文件名用于awk获取第二列:

diff -sqr dir1 dir2 | grep identical | awk '{print $2}'

dir1/Test.odt

相关内容