Cara yang baik untuk melakukan perbandingan ini adalah dengan menggunakan finddengan md5sum, maka diff.
Contoh
Gunakan find untuk membuat daftar semua file di direktori kemudian menghitung hash md5 untuk setiap file dan pipa itu diurutkan berdasarkan nama file ke file:
find /dir1/ -type f -exec md5sum {} + | sort -k 2 > dir1.txt
Lakukan prosedur yang sama ke direktori lain:
find /dir2/ -type f -exec md5sum {} + | sort -k 2 > dir2.txt
Kemudian bandingkan hasil dua file dengan diff:
diff -u dir1.txt dir2.txt
Atau sebagai perintah tunggal menggunakan proses substitusi:
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2) <(find /dir2/ -type f -exec md5sum {} + | sort -k 2)
Jika Anda hanya ingin melihat perubahan:
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ") <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | cut -f1 -d" ")
Perintah cut hanya mencetak hash (bidang pertama) untuk dibandingkan dengan diff. Jika tidak, diff akan mencetak setiap baris karena jalur direktori berbeda walaupun hashnya sama.
Tetapi Anda tidak akan tahu file mana yang berubah ...
Untuk itu, Anda dapat mencoba sesuatu seperti
diff <(find /dir1/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /') <(find /dir2/ -type f -exec md5sum {} + | sort -k 2 | sed 's/ .*\// /')
Strategi ini sangat berguna ketika dua direktori yang akan dibandingkan tidak berada di mesin yang sama dan Anda perlu memastikan bahwa file-file tersebut sama di kedua direktori.
Cara lain yang baik untuk melakukan pekerjaan itu adalah menggunakan diffperintah Git (dapat menyebabkan masalah ketika file memiliki izin yang berbeda -> setiap file terdaftar dalam output kemudian):
git diff --no-index dir1/ dir2/
bash --version?