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

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

[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 .

  • Как выяснить, является ли ссылка символической ссылкой, жесткой ссылкой или перекрестком каталогов в Windows?
  • Общие домашние папки между операционными системами
  • Удаление символической ссылки папки Ubuntu удаляет содержимое целевой папки, когда выполняется через OSX & Samba
  • Просмотр списка символических ссылок в системе?
  • Разрешение на создание символических ссылок в Windows 7?
  • Interesting Posts

    Не удалось загрузить DLL (модуль не найден HRESULT: 0x8007007E)

    C #: Как вы редактируете элементы и подэлементы в списке?

    Как создать линейный график, который игнорирует нулевые значения?

    Отправьте запрос POST с данными JSON, используя Volley

    Windows эквивалентна cron?

    Где хранить данные для текущего вызова WCF? Безопасен ли ThreadStatic?

    Как установить или обновить gnome v3.20.X в Kali Linux?

    Как использовать LINQ в C ++ / CLI – в VS 2010 / .Net 4.0

    Учебное пособие по нескольким страницам в Google Web Toolkit (GWT)

    Создать запись реестра для связывания расширения файла с приложением в C ++

    Одновременное использование нескольких AsyncTasks – невозможно?

    Как получить часть файла после строки, которая соответствует выражению grep? (первое совпадение)

    Как изменить TIMEZONE для java.util.Calendar / Date

    Что такое Maven Snapshot и зачем нам это нужно?

    Можно ли отделить основную функцию и classы C ++ от подпрограмм Objective-C и / или C при компиляции и ссылке?

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