我必须编写一个脚本来比较两个目录并根据内容而不是文件名查找重复文件。我正在考虑使用 diff 命令 diff -r dir1 dir2,但我得到了大量不需要的信息,所以我的问题是,根据文件内容而不是名称查找匹配文件的最佳方法是什么
问问题
163 次
7 回答
5
您可以使用像md5sum
. 如果哈希匹配,则文件相同。
于 2013-10-10T03:58:19.973 回答
1
您可以将 -s 标志用于 diff :
diff -sqr dir1 dir2 | grep identical
于 2013-12-10T11:31:29.220 回答
0
有一个名为的程序fdupes
可以进行这种搜索。在 Ubuntu 和 Debian 上,您可以轻松获取它。在其他操作系统上安装它可能并不难。
如果您不想要外部依赖,那么像 Simon 一样,我建议您使用md5sum
而不是diff
.
于 2013-10-10T04:03:39.407 回答
0
我目前正在使用 OpenSSL 库在 C++ 中开发一个名为“ Duplicate File Finder ”的项目(爱好)。正如西蒙所说,我正在使用md5 。
命令为
macOSx 是'$ md5 文件名'和
Linux 是'$ md5sum 文件名'。
如果您想看看,该项目在Github上。
于 2013-10-10T04:05:01.503 回答
0
确定两个文件是否相同的最简单方法肯定是cmp
.
cmp file1 file2 > /dev/null
if [ $? -eq 0 ]
then
echo "Files are identical"
fi
于 2013-10-10T10:26:46.177 回答
0
如果您担心所有额外信息,您可能会发现-q
(安静或简短)选项很有用。diff
或者,您可以将输出定向diff
到dev/null
。重要的是diff
当文件相同时返回代码为 0,如果文件不同则返回代码为 1。
$ 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
要删除不同的消息:
$ diff -q x z > /dev/null
$ echo $?
1
您应该能够很容易地在脚本中使用它。
于 2013-10-10T03:58:23.833 回答
0
Asmd5sum
在 MacOSX 上默认不安装。
您可以使用:md5 -r
代替。
➜ md5 -r /etc/bashrc
7817a5d0c4ebbe0aa5321cf2dd1dcc0b /etc/bashrc
➜ md5sum /etc/bashrc
7817a5d0c4ebbe0aa5321cf2dd1dcc0b /etc/bashrc
The result is the same.
如您所见,结果是相同的。
于 2022-01-20T17:15:55.943 回答