Saya memiliki sejumlah file dalam direktori, dan saya ingin memeriksa apakah semuanya unik. Untuk mempermudah, katakanlah saya memiliki tiga file: foo.txt
, bar.txt
dan baz.txt
. Jika saya menjalankan loop ini, saya akan memeriksa semuanya terhadap satu sama lain:
$ for f in ./*; do for i in ./*; do diff -q "$f" "$i"; done; done
Files bar.txt and baz.txt differ
Files bar.txt and foo.txt differ
Files baz.txt and bar.txt differ
Files baz.txt and foo.txt differ
Files foo.txt and bar.txt differ
Files foo.txt and baz.txt differ
Untuk ratusan file yang ingin saya tangani, ini akan menjadi sangat tidak dapat dibaca; akan lebih baik untuk daftar file yang melakukan pertandingan, dan kemudian saya dapat melihat daftar itu dengan cepat dan memastikan bahwa file hanya cocok diri mereka sendiri. Dari halaman manual, saya akan berpikir bahwa -s
opsi akan mencapai ini:
$ for f in ./*; do for i in ./*; do diff -s "$f" "$i"; done; done
Files bar.txt and bar.txt are identical
Files baz.txt and baz.txt are identical
Files foo.txt and foo.txt are identical
... Namun, sebenarnya ia juga mencetak seluruh isi dari setiap file yang berbeda. Apakah ada cara untuk menekan perilaku ini, jadi saya hanya mendapatkan perilaku di atas?
Atau, apakah ada alat lain yang dapat melakukan ini ?
diff -qrs
ketika membandingkan file besar (diam-diam menekan perbedaan pencetakan)Alat tercepat yang ditulis untuk tujuan itu adalah fdupes (tersedia di repo paket Fedora dan Ubuntu dan ...)
Pemakaian:
sumber
Jika Anda perlu menemukan file identik dalam daftar, pertama urutkan berdasarkan ukuran, misalnya dengan
kemudian untuk setiap kelompok file berukuran identik, jalankan
md5sum
di atasnya untuk melihat dengan mudah yang identik dengan yang.Untuk file besar, bisa lebih cepat dengan checksum pertama hanya sepotong pendek dari seluruh file:
dan kemudian melakukan checksum lengkap hanya pada file yang dicurigai.
sumber