根据内容查找匹配文件

时间:2013-10-10 03:54:37

标签: bash

我必须编写一个脚本来比较两个目录,并根据内容而不是文件名找到重复的文件。我正在考虑使用diff命令diff -r dir1 dir2,但是我得到了大量不需要的信息,所以我的问题是,根据文件内容而不是名称找到匹配文件的最佳方法是什么

6 个答案:

答案 0 :(得分:4)

您可以使用像md5sum这样的哈希函数。如果哈希匹配,则文件相同。

答案 1 :(得分:1)

你可以在diff:

中使用-s标志
diff -sqr dir1 dir2 | grep identical

答案 2 :(得分:0)

如果您担心所有额外信息,您可能会发现-q的{​​{1}}(安静或简短)选项很有用。

或者,您可以将diff的输出定向到diff。重要的是dev/null在文件相同时返回代码为0,如果它们不同则返回1。

diff

删除不同消息:

$ echo "Hello" > x
$ cp x y
$ echo "Goodbye" > z
$ diff -q x y
$ echo $?
0
$ diff -q x z
Files x and z differ
$ echo $?
1

你应该能够在脚本中轻松地使用它。

答案 3 :(得分:0)

有一个名为fdupes的程序可以执行此类搜索。在Ubuntu和Debian上你可以得到它。在其他操作系统上安装它可能并不困难。

如果你不想要外部依赖,那么就像Simon一样,我建议你使用md5sum而不是diff

答案 4 :(得分:0)

我目前正在使用OpenSSL库在C ++中处理名为“重复文件查找器”的项目(爱好)。我正在使用 md5 ,Simon也说过。

的命令

macOSx是'$ md5 filename'

Linux '$ md5sum filename'

如果你想看看,项目在Github

答案 5 :(得分:0)

查找两个文件是否相同的最简单方法肯定是cmp

cmp file1 file2 > /dev/null
if [ $? -eq 0 ]
then
    echo "Files are identical"
fi