Symlink до поточної папки як абсолютний шлях без введення цілого контуру


10

Символьні посилання зберігаються ярликами відносних шляхів:

~/foo ln -s . ~/bar/foo
~/foo ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .

Файл ~/bar/fooє посиланням на barпоточний каталог s, тобто до самого себе

Що робити, якщо я хочу створити симпосилання в іншому каталозі до каталогу, в якому я перебуваю в той час? Отже, у наведеному вище прикладі я перебуваю ~/fooі хочу створити ~/bar/fooяк символьне посилання на ~/foo. Звичайно, мій поточний каталог може бути трохи довше 5 символів і може бути не таким простим набором.

Відповіді:


13

Я б сказав тип

ln -s $PWD ~/bar/

або

ln -s `pwd` ~/bar/

Ви можете також використовувати

ln -s $PWD ~/bar/

але я думаю, ви це знали, і це не те, за чим ви доглядаєте. Тож, будь ласка, можете оновити своє запитання, щоб пояснити, яка ваша мета?

Якщо шлях містить пробіли, доцільно використовувати:

ln -s "$PWD" ~/bar/

2
Подвійне цитування $змінних та підстановок команд, інакше назви файлів із пробілами приглушать запуск. Ви також не потребуєте закінчення $(basename $PWD)(і ви забули $(і цитуєте :-))), оскільки це так чи інакше ім'я посилання.
Даніель Андерссон

Я думаю, що я був дурним. Я думав, що спробував pwdпідхід і щось пішло не так. Давайте приведемо це до помилки ID-ten-T
Гарет

@DanielAndersson ви праві, що він не підтримує пробілів у шляху. Гарна думка. тому для запису я оновлю відповідь :)
Гюйгенс

4

Абсолютно:

ln -s "$(readlink -f .)" ~/bar

(може бути корисно для загальності в сценаріях) або просто

ln -s ~/foo ~/bar

Відносно:

ln -s ../foo ~/bar

Введення вкладки допоможе ввести вкладку.


З коментаря Grawity та http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Помітні зміни у випуску 8.16 (2012-03-26) [стабільний]

...

lnтепер приймає --relativeможливість створити відносне символічне посилання на ціль, незалежно від того, як вказано ціль.

Отже, з цією версією:

ln -s --relative . ~/bar

повинен працювати (з практикою ідентичний ваш перший приклад, з додаванням --relativeвимикача).


4
Останні coreutils можуть автоматично створювати відносні символьні посилання за допомогою ln -s -r foo ~/bar.
користувач1686

@grawity: Цікаво. Мабуть, ще не в моїй системі (Debian Sid).
Даніель Андерссон

Здається, було додано для v8.16 22 березня, повідомляє git.
користувач1686

1
Крім того , що є перевагою $(readlink -f .)над $PWD?
користувач1686

2
@grawity: Не так багато. Вони працюють інакше, якщо до поточного робочого каталогу було звернено посилання. readlink -fПотім буде посилання на абсолютний цільовий шлях поточного каталогу, в той час як $PWDбуде посилання на буквальний каталог, в якому зараз знаходиться. Те, що шукається, можливо, час від часу відрізняється, і в першу чергу, ймовірно, зовсім не проблема.
Даніель Андерссон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.