diff文件只比较每行的前n个字符

我有2个文件。 让我们称之为md5s1.txt和md5s2.txt。 两者都包含a的输出

find -type f -print0 | xargs -0 md5sum | sort > md5s.txt 

命令在不同的目录中。 许多文件被重新命名,但内容保持不变。 因此,他们应该有相同的md5sum。 我想生成一个差异

 diff md5s1.txt md5s2.txt 

但它应该只比较每行的前32个字符,即只有md5sum,而不是文件名。 等于md5sum的行应该被认为是相等的。 输出应该是正常的diff格式。

Solutions Collecting From Web of "diff文件只比较每行的前n个字符"

易启动器:

 diff <(cut -d' ' -f1 md5s1.txt) <(cut -d' ' -f1 md5s2.txt) 

另外,请考虑

 diff -EwburqN folder1/ folder2/ 

只比较使用diff <(cut -c -32 md5sums.sort.XXX)的md5列,并且使用--old/new-line-format='%dn'$'\n'来指示diff打印添加或去除的行的行号。 --old/new-line-format='%dn'$'\n' 。 将其ed md5sums.sort.XXXed md5sums.sort.XXX以便只打印md5sums.sort.XXX文件中的那些行。

 diff \ --new-line-format='%dn'$'\n' \ --old-line-format='' \ --unchanged-line-format='' \ <(cut -c -32 md5sums.sort.old) \ <(cut -c -32 md5sums.sort.new) \ | ed md5sums.sort.new \ > files-added diff \ --new-line-format='' \ --old-line-format='%dn'$'\n' \ --unchanged-line-format='' \ <(cut -c -32 md5sums.sort.old) \ <(cut -c -32 md5sums.sort.new) \ | ed md5sums.sort.old \ > files-removed 

ed的问题是它会把整个文件加载到内存中,如果你有很多的校验和,这可能是一个问题。 不要将diff的输出管道输入ed ,而是将其输入到下面的命令中,这将使用更少的内存。

 diff … | ( lnum=0; while read lprint; do while [ $lnum -lt $lprint ]; do read line <&3; ((lnum++)); done; echo $line; done ) 3<md5sums.sort.XXX 

如果你正在寻找重复的文件fdupes可以为你做这个:

 $ fdupes --recurse 

在Ubuntu上,你可以通过做安装

 $ apt-get install fdupes