Bagaimana mendapatkan path lengkap ke target tautan


13

Jika saya memiliki tautan simbolis /var/opt/foodibuat ln -fs /path/to/target/dir foo. Bagaimana saya bisa dalam skrip yang hanya melihat tautannya /path/to/target/dir?

Apa yang ingin saya capai dalam naskah adalah rm -rf /path/to/target/dirsebelum saya melakukannya ln -fs /path/to/another/dir foo.

Jawaban:


30
link=/var/opt/foo

target=$(readlink "$link")

$target sekarang menjadi target tautan, persis seperti yang disimpan dalam sistem file.

Symlinks bisa relatif, jadi ini akan lebih baik untuk penggunaan normal:

target=$(readlink -f "$link")

Perhatikan bahwa ini menggunakan readlinkdari GNU Coreutils, yang mungkin tidak ada di BSD dan sistem lainnya.

Sunting: readlink -f berfungsi pada BSD, selama target tautan ada. realpathadalah alat lain, hanya BSD, yang bekerja dengan cara yang sama.


1
BSD telah melakukan readlink()panggilan sistem sejak zaman 4.2BSD. readlink Utilitas BSD saat ini dirilis dengan FreeBSD 4.10. Itu (kembali) diimplementasikan sebagai tautan keras untuk statperintah ( halaman manual MacOS X halaman manual FreeBSD 9 ). Perhatikan bahwa tidak ada -mopsi.
JdeBP

@ JdeBP: Terima kasih. Itu memang memiliki -f, dan readlink -fberfungsi dengan baik (dengan asumsi target tautan ada). Dalam BSD, realpathtampaknya menjadi alternatif lain readlink -m.
user1686

0

Salah satu caranya adalah (Saya berharap untuk versi yang lebih baik)

olddir=$(pwd)
cd /var/opt/foo
deleteme=$(pwd)
cd $olddir
rm -rf "$olddir"

4
readlinkadalah temanmu
JdeBP
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.