MacOS: Bagaimana cara "cd" ke symlink?

4

Saya memiliki folder "abc". Saya membuat sebuah symlink: ln -s abc abclink. tetapi kemudian, ketika saya mengetik, cd abclinkdikatakan "Tidak ada file atau direktori".

Saya dapat melihat tautannya, ia memiliki izin "lrwxr-xr-x", mengapa tidak berfungsi? Cara membuatnya bekerja?

Ecir Hana
sumber
Saya memiliki masalah yang sama. Tautan berfungsi dengan baik dan keren dengan Finder, tetapi perintah terminal menghasilkan [directory name]: Not a directory. Ada solusi yang lebih mungkin?
Scott Biggs

Jawaban:

7

Biasanya ketika Anda mengalami itu, target Anda tidak valid. yaitu abc tidak ada. Ya, Anda dapat membuat tautan ke hal-hal yang tidak ada.

TheCompWiz
sumber
Dan apakah mungkin untuk memindahkan symlink? Untuk membuatnya di suatu tempat, memindahkannya di bawah folder lain, sambil tetap mempertahankan fungsinya?
Ecir Hana
1
Selama target memiliki jalur penuh ... pasti. tapi jalur relatif mungkin tidak berfungsi dengan baik. yaitu ln -s ../some-dir/some-file some-filevsln -s /dir/some-dir/some-file some-file
TheCompWiz
Nah, Anda bisa membuatnya ... mereka tidak berfungsi.
dmckee
@ dmckee: tidak tahu apa yang sedang Anda bicarakan. Mereka berhasil ... mungkin tidak seperti yang Anda inginkan. Anda hanya perlu memahami "mengapa" mereka bekerja sebagaimana adanya.
TheCompWiz
1

Saya memiliki kasus penggunaan yang membingungkan yang akhirnya sama dengan jawaban yang diterima - direktori tujuan tidak ada - tetapi dengan twist tambahan.

Saya sedang membuat symlink ke direktori yang ditentukan dalam variabel lingkungan yang akan kita panggil FOO:

$ FOO="~/project"
$ ln -s foo "$FOO"

Ini sepertinya bekerja dengan baik:

$ ls -al
lrwxr-xr-x   1 jondoe  jondoe    10 Feb 20 02:25 foo -> ~/project

Namun, ketika saya mencoba masuk ke foofolder, saya akan mendapatkan kesalahan:

$ cd foo
-bash: cd: foo: No such file or directory

Ini aneh, karena kami baru saja melihatnya foopasti ada. Selain itu, demikian juga ~/project:

$ cd ~/project
$ ls -al
drwxr-xr-x  3 jondoe  jondoe  102 Feb 20 02:26 .
drwxr-xr-x  4 jondoe  jondoe  136 Feb 20 02:25 ..
-rw-r--r--  1 jondoe  jondoe    0 Feb 20 02:26 README.md

Bagaimana symlink dan folder yang menunjuk keduanya ada, tetapi saya tidak bisa menggunakan symlink?

Ternyata penyebabnya adalah bahwa FOOvariabel lingkungan memiliki tilde ~di dalamnya. Karena saya membungkus variabel ini dalam tanda kutip ketika membuat symlink, tilde tidak melalui ekspansi bash, sehingga symlink yang dihasilkan menunjuk ke path literal, ~/projectbukan projectfolder di direktori home saya.

Yevgeniy Brikman
sumber
0

Sumber kemungkinan masalah ini: jika direktori target berisi spasi, Anda tidak perlu memberi tanda kutip di sekitar nilai yang dimasukkan dengan menekan Tabtombol, karena Terminal lolos dari spasi dengan garis miring terbalik untuk Anda.

Misalnya, dengan asumsi ada direktori /tmp/Dir With Spaces/:

ln -s /tmp/Dir\ With\ Spaces link1      <-- This works
ln -s "/tmp/Dir With Spaces" link2      <-- As does this
ln -s "/tmp/Dir\ With\ Spaces" link3    <-- But this one doesn't

Anda dapat melihat alasannya dengan melihat output dari ls -l:

lrwxr-xr-x    1 dave  staff          21 Jul 19 10:30 link1 -> /tmp/Dir With Spaces/
lrwxr-xr-x    1 dave  staff          21 Jul 19 10:31 link2 -> /tmp/Dir With Spaces/
lrwxr-xr-x    1 dave  staff          23 Jul 19 10:31 link3 -> /tmp/Dir\ With\ Spaces/

Entah melarikan diri dari spasi di jalur dengan garis miring terbalik, atau lampirkan jalur yang tidak dilepas dalam tanda kutip, tidak keduanya.

Dave Mulligan
sumber