%20.png)
Предположим, у меня есть такая файловая система:
/home/me/dir1/dir2/dir3/dir4/dir5/dir6/file1
Затем /home/me/dir1
я создаю символическую ссылку:
$ cd /home/me/dir1
$ ln -s /home/me/dir1/dir2/dir3/dir4/dir5/dir6 linkdir6
Я пытаюсь скопировать file1 в свой домашний каталог (это мой упрощенный пример, он сложнее, чем этот — «/home/me/» на самом деле имеет гораздо более сложную структуру каталогов, поэтому «~/» не является решением).
$ cd linkdir6
$ cp file1 ../
$ cd ..
$ ls
dir2 linkdir6
Я не вижу файл 1. Ищу его, нахожу его в/home/me/dir1/dir2/dir3/dir4/dir5/file1
Похоже, он cp
не понял, что находится внутри символического каталога.
Как мнеcp
снаружисимволическая папка?
Или как мне дать cp
понять, что ../
нужно разыменовать (гдеместо назначенияв странице руководства указана ссылка)?
Я что-то упустил? Это вообще возможно?
Спасибо!
(последнее замечание — фактический вариант использования — это глубокая структура каталогов внутри одного каталога символической ссылки, попытка скопировать файл ../another-symlink-directory/ без ввода полных путей — это одна из целей символических ссылок, насколько я понимаю)
решение1
На самом деле вы перешли по ссылке с cd linkdir6
. Вы действительно находитесь в этом каталоге, поэтому ../ находится на один уровень выше, в dir5.
Самый безопасный способ с cp — находиться в целевом каталоге. Затем используйте ссылку, чтобы перейти к исходному файлу.
cd ~/me/dir1 #.. Target
cp linkdir6/file1 .
Лично я предпочитаю опцию -t (target) в cp.
cp -t ~/me/dir1 dir1/linkdir6/file1
решение2
$ cp file1 "$(cd .. && pwd -P)"
Видетьэтот ответ.