Я хочу создать символические ссылки для всех файлов в папке 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 ответ1

1

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .