ハッシュを使用して同じファイルを見つけ、そのファイルのパスとアクセス権を表示するにはどうすればよいですか?

ハッシュを使用して同じファイルを見つけ、そのファイルのパスとアクセス権を表示するにはどうすればよいですか?
find ./ -type f -print0|xargs -0 md5sum |sort -k1,32|uniq -w32 -D 

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

関連していない2つのスクリプトがあります。接続しようとしましたが、何の効果もありませんでした。

ベストアンサー1

このようなものを初めて印刷してみてください。

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

したがって、最初の34文字を切り捨て続け、1行に1つのパスを残すことができます。 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

前にバックスラッシュがあります。

おすすめ記事