Masuk ke direktori yang ditautkan oleh tautan

12

Saat saya cdtautan, jalur saya saat ini diawali dengan jalur tautan, bukan jalur direktori yang tautannya. Misalnya

~/dirlinks/maths$ ls -l logic
lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic

~/dirlinks/maths$ cd logic
~/dirlinks/maths/logic$ pwd
/home/tim/dirlinks/maths/logic

~/dirlinks/maths/logic$ cd ..
~/dirlinks/maths$

Saya ingin agar jalur saya saat ini diubah ke jalur direktori tertaut, sehingga saya dapat bekerja dengan direktori induk dari direktori tertaut juga. Selain lstautan untuk mengetahui dir yang ditautkan, dan kemudian cdke dalamnya, apa beberapa cara sederhana untuk mencapainya? Misalnya, setelah cdmenjadi tautan, bagaimana Anda mengubah jalur Anda saat ini ke jalur direktori tertaut?

Tim
sumber

Jawaban:

22

Dengan shell POSIX, Anda dapat menggunakan -Popsi cd builtin:

cd -P <link>

Dengan bash, dari man bash:

Opsi -P mengatakan untuk menggunakan struktur direktori fisik alih-alih mengikuti tautan simbolis (lihat juga opsi -P ke perintah set builtin)

cuonglm
sumber
7
Anda dapat melakukan ini cd -P .setelah yang asli cd.
ctrl-alt-delor
5

Anda dapat menggunakan readlinkuntuk menentukan di mana titik tautan Anda, dan memberikan output ini sebagai target Anda cd.

cd "$(readlink <link>)"

Dalam kasus symlink tambahan yang menunjuk ke symlink, readlinkcukup akan memberikan target, kecuali jika Anda menentukan salah satu opsi untuk mengikuti symlink ke target file kanonik, misalnya readlink -f <link>.

readlink - nilai cetak dari tautan simbolik atau nama file kanonik

-f, --canonicalize
canonicalize dengan mengikuti setiap symlink di setiap komponen nama yang diberikan secara rekursif; semua kecuali komponen terakhir harus ada

-e, --canonicalize-
canonicalize yang ada dengan mengikuti setiap symlink di setiap komponen nama yang diberikan secara rekursif, semua komponen harus ada

-m, --canonicalize-missing
canonicalize dengan mengikuti setiap symlink di setiap komponen nama yang diberikan secara rekursif, tanpa persyaratan tentang keberadaan komponen

Jon Surrell
sumber
5

Kerang mirip korn melacak tautan simbolik di jalur ke direktori saat ini (ini dikenal sebagai pelacakan direktori saat ini logis). Jika Anda ingin memperluas semua tautan simbolis, berikan opsi -Pke cdbuiltin (untuk pelacakan direktori aktual fisik):

cd -P logic

Jika Anda berada di direktori yang telah Anda akses melalui tautan simbolik dan ingin mengalihkan direktori saat ini yang dilacak ke jalur dengan tautan simbolik diperluas, jalankan

cd -P .

Jika Anda ingin mencetak jalur ke direktori saat ini dengan tautan simbolik diperluas, jalankan pwd -P. Dalam bash, jika Anda ingin mematikan pelacakan logis, jalankan set -P; di zsh, jalankan set -watau setopt chase_links.

Gilles 'SANGAT berhenti menjadi jahat'
sumber