Di Linux seseorang dapat menggunakan perintah diff
untuk memeriksa perbedaan file. Saya menggunakannya untuk memeriksa perbedaan di dua modul, keduanya disalin ke /tmp
.
Namun, kedua modul memiliki symlink, yang mungkin tidak menunjuk ke file yang benar, karena modul telah disalin ke /tmp
direktori. Tapi ini tidak masalah. Yang ingin saya periksa adalah apakah symlinknya sama.
Misalnya, dalam satu modul symlink membaca
/home/test/file1
dan di symlink yang lain tertulis:
/etc/rc.d/whatever
diff
sekarang melempar kesalahan karena - secara umum - tidak dapat menemukan file. Tetapi saya ingin diff
mengatakan: "Hai, symlinks itu tidak sama" terlepas dari apakah tautannya menunjuk ke file yang valid atau tidak.
Pertanyaan: Bagaimana mungkin diff
melakukan itu, yaitu tidak mencoba mengikuti tautan, tetapi untuk membedakan tautan itu sendiri?
Sejak versi 3.3, GNU diff tidak mendukung symlink dereferencing, tetapi kemudian membandingkan jalur yang mereka tuju.
Instal GNU diffutils> = 3.3 dan gunakan opsi '--no-dereference'; tidak ada opsi pendek untuk itu.
Diagnostik akan diam jika jalurnya sama, atau:
jika jalurnya berbeda.
sumber
Dengan alat GNU:
Sebenarnya, itu tidak dapat membedakan antara symlink yang disebut
a
itu menunjuk keb -> c
dan yang disebuta -> b
menunjukc
, untuk tidak menyebutkan masalah dengan nama file yang mengandung karakter baris baru, tetapi itu membuat untuk output yang lebih terbaca daripada yang lebih kuat:Di sana, kami menggunakan
//
sebagai pemisah (yang tidak dapat terjadi sebaliknya dalam outputfind
untuk%p
) dan mengonversi karakter baris baru ke karakter NUL (yang tidak dapat terjadi dalam perluasan%p
atau%l
).sumber
Jika saya mengerti dengan benar, Anda ingin memeriksa bahwa symlink menunjuk ke tujuan teoritis yang sama, atau bahwa jika seseorang bukan symlink, file yang lain tertaut ke file yang sama. Ini harus melakukan apa yang Anda inginkan:
sumber
-m
, bukan-f
. Terima kasih!-m
./home/test/file1
symlink adalah/etc/rc.d/whatever
, atau keduanya symlink/
, itu akan melaporkan bahwa mereka sama. Saya pikir OP ingin melihat perbedaan dalam "path" yang tersimpan di symlink, bukan apakah mereka menyelesaikan ke file yang sama (yang Anda miliki[[ a -ef b ]]
).