Как копировать символические ссылки?

У меня есть каталог, содержащий некоторые символические ссылки:

[email protected]:include$ find .. -type l -ls 4737414 0 lrwxrwxrwx 1 user group 13 Dec 9 13:47 ../k0607-lsi6/camac -> ../../include 4737415 0 lrwxrwxrwx 1 user group 14 Dec 9 13:49 ../k0607-lsi6/linux -> ../../../linux 4737417 0 lrwxrwxrwx 1 user group 12 Dec 9 13:57 ../k0607-lsi6/dfc -> ../../../dfc 4737419 0 lrwxrwxrwx 1 user group 17 Dec 9 13:57 ../k0607-lsi6/dfcommon -> ../../../dfcommon 4737420 0 lrwxrwxrwx 1 user group 19 Dec 9 13:57 ../k0607-lsi6/dfcommonxx -> ../../../dfcommonxx 4737421 0 lrwxrwxrwx 1 user group 17 Dec 9 13:57 ../k0607-lsi6/dfcompat -> ../../../dfcompat 

Мне нужно скопировать их в текущий каталог. Полученные ссылки должны быть независимы от их прототипов и привести непосредственно к их целевым объектам.

  • cp -s создает ссылки на ссылки, которые не соответствуют поведению.
  • cp -s -L отказывается копировать ссылки на каталоги
  • cp -s -L -r отказывается копировать относительные ссылки на нерабочий каталог

Что мне делать?

 cp --preserve=links 

На странице man:

  --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,owner- ship,timestamps), if possible additional attributes: context, links, xattr, all 

Лично я использую cp -av для большей части моего тяжелого копирования. Таким образом, я могу сохранить все – даже рекурсивно – и увидеть результат. Конечно, это только личное предпочтение.

Что касается того, почему ваши другие варианты не сделали то, что вы ожидали, -s делает ссылку вместо копирования, а -L следует за ссылками в источнике, чтобы найти файл для копирования вместо копирования самих ссылок.

Если ссылки содержат относительные пути, то копирование ссылки не будет регулировать относительный путь. Используйте readlink , с переключателем -f чтобы следовать рекурсивно, чтобы получить абсолютный путь ссылки. Например:

 ln -s $(readlink -f old/dir/oldlink) new/dir/newlink 

Если сохранение относительных путей – это то, что вы хотите, то то, что вам нужно, – это вариант -P of cp , как сказал Игнасио Васкес-Абрамс.

Как говорит -P страница, используйте -P .

Interesting Posts
Давайте будем гением компьютера.