Saya menggunakan diff -r a b
untuk membandingkan direktori a dan b secara rekursif . Sering terjadi bahwa meskipun ada beberapa link yang rusak (link yang rusak yang sama di kedua a dan b direktori dan menunjuk ke yang sama, non-ada target).
diff kemudian menampilkan pesan kesalahan untuk kasus-kasus tersebut dan keluar dengan kode keluar non-nol, namun saya ingin tetap diam, dan keluar dengan 0 karena direktori sama di buku saya.
Bagaimana saya bisa melakukan itu?
Jawaban:
Untuk versi 3.3 atau yang lebih baru
diff
, Anda harus menggunakan--no-dereference
opsi, seperti yang dijelaskan dalam jawaban Pete Harlan .Sayangnya, versi lama dari
diff
tidak mendukung pengabaian symlink :Jika yang Anda inginkan adalah memverifikasi rsync (dan mungkin memperbaiki apa yang hilang), maka Anda bisa menjalankan perintah rsync untuk kedua kalinya. Jika Anda tidak ingin melakukan itu, maka memeriksa-menjumlahkan direktori mungkin sudah cukup.
Jika Anda benar-benar ingin melakukan ini
diff
, maka Anda dapat menggunakanfind
untuk melewati symlink, dan menjalankan diff pada setiap file secara individual. Lewati direktori Anda a dan b sebagai argumen:atau sebagai one-liner:
Ini akan mengidentifikasi file yang berbeda dalam isi, atau file yang berada di sebuah tetapi tidak dalam b .
Perhatikan bahwa:
rsync
skenario Anda .sumber
for f in
Temukan a / *! -tipe l;do echo $f b/${f#*/};done
. Saya tidak punya waktu untuk menguji ini sekarang. Beri tahu saya jika itu berhasil.$(xxx)
bukannya backticks. Simetri backticks membuatnya lebih mudah dibaca dan mencegah bersarang. Mengenai 1 dan 2 lihat stackoverflow.com/questions/11366184/…Karena versi 3.3 GNU
diff
mendukung tidak men-symlink, tetapi kemudian membandingkan jalur yang mereka tuju.Instal GNU
diffutils
> = 3.3 dan gunakan--no-dereference
opsi; tidak ada opsi pendek untuk itu.Diagnostik akan diam jika sama atau:
Tautan simbolik
/tmp/noderef/a/symlink
dan/tmp/noderef/b/symlink
berbedasumber
Anda dapat menggunakan versi yang lebih baru dari
diff
Dalam
diff
GNUdiffutils
3.3 termasuk--no-dereference
opsi yang memungkinkan Anda untuk membandingkan sendiri symlink daripada targetnya. Ini melaporkan jika mereka berbeda, diam jika mereka setuju dan tidak peduli apakah mereka rusak.Saya tidak tahu kapan opsi ditambahkan; itu tidak ada di 2.8.1.
sumber