だから、これを出力としてファイルの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
のいずれか1つのみが表示されるはずです。何か不足していますか?なぜこのように出力されるのかについて、誰もが私を啓発できますか?
sort
の前にuniq
を使用する必要があります。
find . -type f -exec md5sum {} ';' | sort | uniq -w 33
uniq
は、繰り返し行のみを削除します。繰り返しを探す行の順序は変更しません。 sort
はその部分を実行します。
これはman uniq
で文書化されています:
注: 'uniq'は、隣接していない限り、繰り返される行を検出しません。最初に入力をソートするか、
sort -u' without
uniq 'を使用することができます。
uniq
の入力はソートする必要があります。したがって、例の場合、
find . -type f -exec md5sum '{}' ';' | sort | uniq -w 33
動作します。 -w
(--check-chars=N
)は、最初の列に関してのみ行を一意にします。この場合、このオプションは機能します。ただし、uniq
の行の関連部分を指定する可能性は限られています。たとえば、列4を無視して、列3および5での作業を指定するオプションはありません。
コマンドsort
には一意の出力行自体のオプションがあり、並べ替えに使用されるキーに関して行は一意です。これは、sort
の強力なキー構文を使用して、行をどの部分に固有にするかを定義できることを意味します。
例については、
find . -type f -exec md5sum '{}' ';' | sort -k 1,1 -u
同じ結果が得られますが、sort
部分は他の用途に対してより柔軟です。
または、killdupesをインストールすることもできます。これは、存在する最後のすべての重複を破壊するための私のプログラムです!
https://github.com/batchmcnulty/killdupes
:-)