具有相同 md5 和的输出行

Кот*_*ася 3 find uniq

我有一个这样的脚本

\n
find path -type f -exec md5sum {} +'\n
Run Code Online (Sandbox Code Playgroud)\n

有这样的结论

\n
/tmp\n\xe2\x9d\xaf find $pwd -type f -exec md5sum {} + \n\n\\a7c8252355166214d1f6cd47db917226  ./guess.bash\ne1c06d85ae7b8b032bef47e42e4c08f9  ./qprint.bash\n8d672b7885d649cb76c17142ee219181  ./uniq.bash\n2d547f5b610ad3307fd6f466a74a03d4  ./qpe\n523166a51f0afbc89c5615ae78b3d9b0  ./Makefile\n57a01f2032cef6492fc77d140b320a32  ./my.c\nc5c7b1345f1bcb57f6cf646b3ad0869e  ./my.h\n6014bc12ebc66fcac6460d634ec2a508  ./my.exe\n0ff50f0e65b0d0a5e1a9b68075b297b8  ./levik/2.txt\n5f0650b247a646355dfec2d2610a960c  ./levik/1.txt\n5f0650b247a646355dfec2d2610a960c  ./levik/3.txt\n
Run Code Online (Sandbox Code Playgroud)\n

我们需要这样一个结论

\n
5f0650b247a646355dfec2d2610a960c  ./levik/1.txt\n5f0650b247a646355dfec2d2610a960c  ./levik/3.txt\n
Run Code Online (Sandbox Code Playgroud)\n

pLu*_*umo 15

如果您的任务是查找重复文件,您还可以使用fdupes

在给定路径中搜索重复文件。通过比较文件大小和 MD5 签名,然后逐字节比较来找到此类文件。

fdupes -r .
Run Code Online (Sandbox Code Playgroud)


Ste*_*itt 12

如果您\xe2\x80\x99已经有了 GNU uniq,您可以要求它显示重复前 32 个字符的所有行\xc2\xb9:

\n
find path -type f -exec md5sum {} + | sort | uniq -D -w32\n
Run Code Online (Sandbox Code Playgroud)\n

该列表需要排序,因为uniq只能发现连续的重复项。这还假设所有文件路径都不包含换行符;为了解决这个问题,假设所有工具都是 GNU 实现,请使用:

\n
find . -type f -exec md5sum -z {} + | sort -z | uniq -z -D -w32 | tr \'\\0\' \'\\n\'\n
Run Code Online (Sandbox Code Playgroud)\n

(GNUmd5sum自己的处理文件名中特殊字符的方法,但这会产生 \xe2\x80\x99t 无法uniq以上面所示的方式使用的输出。)

\n
\n

\xc2\xb9 从技术上讲,在当前版本的 GNU 中uniq,考虑的是前 32 个字节,例如 UTF-8 编码\xc3\xa1,并且\xc3\xa9字符将被视为相同,因为uniq -w1它们的编码都以 0xc3 字节开头。不过,对于十六进制编码的 MD5 和中的 0-9a-f 字符来说,这没有什么区别,因为这些字符始终编码在一个字节上。

\n