このようなスクリプトがあります。
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文字には違いはありません。これらの文字は常にシングルバイトでエンコードされるためです。