我如何使用哈希找到相同的文件,然后显示它们的路径及其访问权限?

我如何使用哈希找到相同的文件,然后显示它们的路径及其访问权限?
find ./ -type f -print0|xargs -0 md5sum |sort -k1,32|uniq -w32 -D 

find "." -type f -printf  "%i %p %s %t  %M\n"

我有两个不相关的脚本。我尝试连接它们,但对我来说没有任何作用

答案1

第一个打印类似的东西

b1946ac92492d2347c6235b4d2611184  ./one/two/a.txt
b1946ac92492d2347c6235b4d2611184  ./some/c.txt

因此,我们可以继续截掉前 34 个字符,留下每行一个路径。如果你有 GNU xargs,那么就可以对其进行处理,并可以在它们上xargs -d '\n'运行。ls或者find

$ find ./ -type f -print0|xargs -0 md5sum |sort |uniq -w32 -D |cut -c35- |xargs -d '\n' ls -ld
-rw-r--r-- 1 me me 6 Apr 12 22:38 ./one/two/a.txt
-rw-r--r-- 1 me me 6 Apr 12 22:38 ./some/c.txt

$ find ./ -type f -print0|xargs -0 md5sum |sort |uniq -w32 -D |cut -c35- |xargs -I{} -d '\n' find {} -printf  "%i %p %s %t  %M\n"
1706523 ./one/two/a.txt 6 Mon Apr 12 22:38:18.6494036350 2021  -rw-r--r--
1710394 ./some/c.txt 6 Mon Apr 12 22:38:24.8373114680 2021  -rw-r--r--

sort -k1,32将按第一个和第 32 个空格分隔字段排序,而不是按前 32 个字符排序。哈希值位于字符串的开头,因此默认排序应该有效。)

请注意,如果您的文件名中包含换行符,则xargs -d '\n'不行。但如果这是一个问题,您将需要更多修改,因为md5sum当遇到这样的名称时,的输出也会发生变化。例如我得到

$ md5sum $'new\nline'
\b1946ac92492d2347c6235b4d2611184  new\nline

带有前导反斜杠。

相关内容