我有这样的脚本
find path -type f -exec md5sum {} +'
有这个结论
/tmp
❯ find $pwd -type f -exec md5sum {} +
\a7c8252355166214d1f6cd47db917226 ./guess.bash
e1c06d85ae7b8b032bef47e42e4c08f9 ./qprint.bash
8d672b7885d649cb76c17142ee219181 ./uniq.bash
2d547f5b610ad3307fd6f466a74a03d4 ./qpe
523166a51f0afbc89c5615ae78b3d9b0 ./Makefile
57a01f2032cef6492fc77d140b320a32 ./my.c
c5c7b1345f1bcb57f6cf646b3ad0869e ./my.h
6014bc12ebc66fcac6460d634ec2a508 ./my.exe
0ff50f0e65b0d0a5e1a9b68075b297b8 ./levik/2.txt
5f0650b247a646355dfec2d2610a960c ./levik/1.txt
5f0650b247a646355dfec2d2610a960c ./levik/3.txt
我们需要这样的结论
5f0650b247a646355dfec2d2610a960c ./levik/1.txt
5f0650b247a646355dfec2d2610a960c ./levik/3.txt
如果您的任务是查找重复文件,您还可以使用
fdupes
:如果您有 GNU
uniq
,您可以要求它显示所有重复前 32 个字符的行¹:该列表需要排序,因为
uniq
只发现连续的重复项。这也假设所有文件路径都不包含换行符;要处理这个问题,假设所有工具的 GNU 实现,请使用:(GNU
md5sum
有自己的方式来处理文件名中的特殊字符,但这会产生无法以uniq
上述方式使用的输出。)¹ 从技术上讲,在当前版本的 GNU
uniq
中,考虑的是前 32个字节,例如 UTF-8 编码á
和é
字符将被视为相同,uniq -w1
因为它们的编码都以 0xc3 字节开头。但是,对于在十六进制编码的 MD5 和中发现的 0-9a-f 字符,这没有什么区别,因为这些字符总是编码在一个字节上。