我正在处理大量(30,000)大小约为10MB的文件。其中一些文件(我估计2%)实际上是重复的,我需要仅保留每个重复对(或三元组)的一个副本。
你能建议我一种有效的方法吗?我正在使用Unix系统。
我正在处理大量(30,000)大小约为10MB的文件。其中一些文件(我估计2%)实际上是重复的,我需要仅保留每个重复对(或三元组)的一个副本。
你能建议我一种有效的方法吗?我正在使用Unix系统。
find /path -type f -print0 | xargs -0 sha512sum | awk '($1 in seen){print "duplicate: "$2" and "seen[$1] }(!($1 in seen)){seen[$1]=$2}'
查找可能重复的文件:
find DIR -type f -exec sha1sum "{}" \; | sort | uniq -d -w40
cmp
来检查文件是否真正相同。-w
(就像第一条评论所说的那样,这只在GNU中可用),您可以将sort
的输出导入到cut -d \ -f 1
,然后将其导入到uniq -d
。这更具可移植性。它适用于BSD、OS X和其他系统。 - monokromeuniq
,你就得使用awk
和它的关联数组来模拟uniq
。 - Aaron Digulla有一个现成的工具可用:fdupes
从一个被删除的旧答案中恢复解决方案。
将所有文件名保存在一个数组中。然后遍历该数组。在每次迭代中,使用命令md5sum
将文件内容与其他文件的内容进行比较。如果MD5相同,则删除该文件。
例如,如果文件b
是文件a
的副本,则两个文件的md5sum
将相同。