Saya punya skrip untuk secara rekursif membuat symlink di direktori home saya ke direktori pengaturan saya, untuk menjaga file di bawah kontrol versi. Saya ingin melompati file yang sudah disinkronkan melalui direktori induk. Yaitu, jika saya memiliki file / direktori ini:
~/foo/ -> ~/settings/foo/
~/settings/foo/
~/settings/foo/bar
, bagaimana saya memeriksa bahwa ~ / foo / bar dan ~ / settings / foo / bar adalah file yang sama?
Sunting : Doh, beberapa menit lagi pencarian mengungkapkan jawabannya :readlink -f $path
linux
symbolic-link
l0b0
sumber
sumber
stat -L
.Banyak shell memiliki
-ef
operator untuktest
builtin (atau sinonimnya[
) untuk menguji apakah dua jalur menunjuk ke file yang sama (mengikuti tautan simbolik). Ini termasuk bash, dash, pdksh, ksh88, ksh93 dan zsh, tetapi tidak POSIX sh. Di bash, ksh atau zsh, Anda juga dapat menggunakan-ef
dalam[[ … ]]
membangun bersyarat.sumber
-ef
memiliki keuntungan menjadi lebih portabel (juga sedikit lebih cepat, tetapi tidak sehingga Anda akan memperhatikan sebagian besar waktu). Misalnya ia berfungsi pada * BSD, OSX, BusyBox serta Linux / Cygwin (GNU). Ini juga lebih jelas, karena melakukan persis apa yang diperlukan. Satu-satunya keuntungan yang dapat saya lihat untuk meneleponstat
adalah ketika Anda tidak ingin mengikuti symlink.Untuk softlink (dibuat dengan
ln -s
), Anda dapat menggunakanrealpath
. Ini tidak akan bekerja untuk hardlink.sumber