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