Символическое связывание в Терминале (Что я делаю не так?)

Я хочу создать символические ссылки для всех файлов в папке parent/target/, Я хочу, чтобы ссылки были в папке parent/destination/, Мой рабочий каталог parent/ для следующего вывода терминала, используя bash:

$ cd target/
$ ll
total 16
drwxr-xr-x 4 jesse staff 136 Feb 23 16:31 ./
drwxr-xr-x@ 10 jesse staff 340 Feb 23 16:38 ../
-rw-r--r-- 1 jesse staff 10 Feb 23 16:23 file.txt
-rw-r--r-- 1 jesse staff 10 Feb 23 16:23 file2.txt
$ ln -s * ../destination/
$ ll ../destination/
total 16
drwxr-xr-x 4 jesse staff 136 Feb 23 16:38 ./
drwxr-xr-x@ 10 jesse staff 340 Feb 23 16:38 ../
lrwxr-xr-x 1 jesse staff 8 Feb 23 16:38 file.txt@ -> file.txt
lrwxr-xr-x 1 jesse staff 9 Feb 23 16:38 file2.txt@ -> file2.txt

Почему он создает символические ссылки, которые ссылаются на себя?? Я прочитал ln справочная страница и различные другие lnсвязанные с SE вопросы, но я думаю, я просто что-то упустил.

(Я использую Bash в терминале в OS X 10.11.3)

1 ответ

Решение

Вам необходимо указать абсолютный путь в источнике: в вашем случае это будет:

ln -s $PWD/* ../destination/

В отличие от жесткой ссылки, где созданная запись каталога напрямую ссылается на тот же исходный файл, символическая ссылка содержит текст исходной ссылки на файл. Действительно, исходный файл не должен существовать при создании символической ссылки, хотя очевидно, что вы используете * гарантирует, что используются только существующие исходные файлы.

На самом деле все немного сложнее: если вы указываете абсолютный путь в ссылке, то ссылка на ссылку действует так, как если бы вы указали исходный файл; но если вы укажете относительный путь, он будет добавлен в каталог, где находится ссылка. Таким образом, альтернатива, которую вы могли бы использовать из target каталог:

cd ../destination/; ln -s ../target/* .

Это будет иметь тот же эффект, что и абсолютный путь, но имеет одно отличие: если все дерево каталогов было скопировано или перемещено в другое место (например, где-то в другом каталоге пользователя), ссылки будут ссылаться на файлы в их новом местоположении. Поэтому выбор абсолютных или относительных ссылок будет зависеть от того, захотите ли вы когда-либо скопировать или переместить исходные файлы вместе со ссылками: если исходные файлы всегда будут оставаться в одном месте, используйте абсолютные ссылки.

Другие вопросы по тегам