同じ md5 合計を持つ出力ライン

同じ md5 合計を持つ出力ライン

このようなスクリプトがあります。

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

答え1

重複ファイルの検索がジョブの場合は、次のものを使用することもできますfdupes

特定のパスで重複ファイルを検索します。これらのファイルは、ファイルサイズをMD5署名と比較し、バイト単位で比較することによって検索されます。

fdupes -r .

答え2

GNUがある場合は、uniq最初の32文字を繰り返すすべての行を表示するように要求できます。

find path -type f -exec md5sum {} + | sort | uniq -D -w32

uniq連続した重複項目のみが見つかるため、リストを並べ替える必要があります。これはまた、すべてのファイルパスに改行文字が含まれていないと仮定し、すべてのツールがGNU実装であると仮定し、以下を使用します。

find . -type f -exec md5sum -z {} + | sort -z | uniq -z -D -w32 | tr '\0' '\n'

(GNUmd5sumファイル名の特殊文字を処理する独自の方法ただし、これはuniq上記の方法で使用できない出力を生成します。 )


1 技術的には、現在のGNUバージョンでは、uniq最初の32バイトたとえば、UTF-8エンコーディングáと文字は、エンコーディングが0xc3バイトで始まるため、é同じと見なされます。uniq -w1ただし、16進数でエンコードされたMD5とMD5の0-9a-f文字には違いはありません。これらの文字は常にシングルバイトでエンコードされるためです。

関連情報