edit untuk koreksi & kejelasan opsi - Saya lupa '--brief'
diff -rs --brief "$dir1" "$dir2"
-r, --recursive recursively compare any subdirectories found
-s, --report-identical-files report when two files are the same
-q, --brief report only when files differ
--speed-large-files assume large files and many scattered small changes
dan tambahkan opsi lain sesuai selera, tergantung pada apa yang Anda bandingkan:
-i, --ignore-case ignore case differences in file contents
-b, --ignore-space-change ignore changes in the amount of white space
-B, --ignore-blank-lines ignore changes whose lines are all blank
--strip-trailing-cr strip trailing carriage return on input
--ignore-file-name-case ignore case when comparing file names
diff -rs akan membaca setiap byte dari dokumen asli dan menyalin, dan melaporkan file yang sama.
Format keluaran diff didefinisikan oleh POSIX, sehingga cukup portabel. Anda mungkin ingin menambahkan sesuatu seperti:
| tee diff-out.1 | grep -v -Ee 'File. * dan. * identik'
Anda bisa menggunakan chksums atau hashes, tetapi Anda harus tetap menyinkronkannya dengan pohon file, jadi Anda akan kembali membaca setiap byte dari setiap file.
EDIT - terlalu lama untuk dikomentari, sebagai tanggapan atas:
file lebih dari 10GB tidak memverifikasi
Anda mungkin ingin mencoba opsi diff ini: --speed-large-files
Mungkin saja diff yang Anda gunakan tidak cocok dengan file yang sangat besar (misalnya lebih besar dari memori sistem), dan karenanya melaporkan perbedaan antara file yang sebenarnya sama.
Saya pikir ada opsi -h atau 'bdiff' yang lebih baik pada file besar, tetapi saya tidak dapat menemukannya di Fedora. Saya percaya bahwa opsi --speed-large-files adalah penerus dari opsi '-h' "half-hearted bandingkan".
Pendekatan yang berbeda akan mengulangi perintah rsync yang Anda gunakan, dengan '-vin' (verbose, itemize, no_run). Ini akan melaporkan setiap perbedaan yang ditemukan rsync - dan seharusnya tidak ada.
Untuk memindahkan beberapa file, Anda melihat skrip sesuatu seperti:
if [ cmp -s "$dir1/$path" "$dir2/$path" ] ; then
target="$dir2/verified/$path"
mkdir -p $(basename "$target")
mv "$dir2/$path" "$target"
fi
tapi saya tidak menyarankan melakukan itu. Pertanyaan mendasarnya adalah "bagaimana saya bisa yakin bahwa rsync menyalin hierarki file dengan benar?" dan jika Anda dapat menunjukkan kepada diri sendiri bahwa rsync bekerja dengan baik, dengan diff atau alat lain, maka Anda bisa mengandalkan rsync, daripada mengerjakannya.
rsync -vin akan membandingkan berdasarkan opsi lain apa pun yang Anda berikan. Saya pikir itu default ke checksum, tetapi Anda benar, -c atau --checksum diperlukan untuk itu.
Utilitas diff benar-benar ditujukan untuk file baris teks, tetapi harus melaporkan under -s 'identik' untuk file biner.
--Brief harus menekan output konten file apa pun - permintaan maaf saya karena mengabaikannya sebelumnya - itu dikubur dalam skrip yang jelek.