因此,我正在检查我的文件的md5散列,并将其作为输出:
657cf4512a77bf47c39a0482be8e41e0 ./dupes2.txt
657cf4512a77bf47c39a0482be8e41e0 ./dupes.txt
8d60a927ce0f411ec94ac26a4785f749 ./derpina.txt
15f63928b8a1d5337137c38b5d66eed3 ./foo.txt
8d60a927ce0f411ec94ac26a4785f749 ./derp.txt但是,在运行find . -type f -exec md5sum '{}' ';' | uniq -w 33以找到唯一的散列之后,我得到以下内容:
657cf4512a77bf47c39a0482be8e41e0 ./dupes2.txt
8d60a927ce0f411ec94ac26a4785f749 ./derpina.txt
15f63928b8a1d5337137c38b5d66eed3 ./foo.txt
8d60a927ce0f411ec94ac26a4785f749 ./derp.txt根据我的理解,derpina.txt或derp.txt中只有一个应该出现,因为它们的散列是相同的。我是不是遗漏了什么?有人能告诉我为什么会产生这样的结果吗?
发布于 2014-10-14 01:11:54
您需要在使用sort之前使用uniq:
find . -type f -exec md5sum {} ';' | sort | uniq -w 33uniq只删除重复行。它不会重新排序寻找重复的线路。这部分是sort做的。
这在man uniq中有记录:
注意:
uniq不会检测重复的行,除非它们是相邻的。您可能希望先对输入进行排序,或者使用不带sort -u的uniq。
发布于 2014-10-14 01:41:55
需要对uniq的输入进行排序。所以举个例子,
find . -type f -exec md5sum '{}' ';' | sort | uniq -w 33会起作用的。-w (--check-chars=N)使行仅对第一列具有唯一性;此选项适用于这种情况。但是,指定uniq行的相关部分的可能性是有限的。例如,没有任何选项可以指定在第3和第5列上工作,而忽略第4列。
命令sort对于唯一的输出行本身有一个选项,对于用于排序的键,行是唯一的。这意味着我们可以使用sort强大的键语法来定义行的哪一部分应该是uniq。
举个例子,
find . -type f -exec md5sum '{}' ';' | sort -k 1,1 -u给出了同样的结果,但是sort部分对于其他用途更灵活。
发布于 2017-12-01 19:59:12
https://askubuntu.com/questions/536775
复制相似问题