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

988
rrlamichhane

У меня есть эта папка /full/path/sourceFolderсо следующими файлами:

full/path/sourceFolder/fileA /full/path/sourceFolder/copyA -> fileA /full/path/sourceFolder/copyB

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

Теперь мне нужна команда копирования, которая скопирует все файлы с именем copy * в sourceFolder в destinationFolder. Когда я копирую файл copyA, он должен скопировать источник символической ссылки, то есть fileA, но сохранить имя copyA. Команда копирования также должна работать для копирования файла copyB.

Можно ли это сделать?

Я попробовал эти команды, но они не работают, в основном потому, что моя ссылка относительна:

cp -rf --preserve=links /full/path/sourceFolder/copy* /target/path/ cp -RP /full/path/sourceFolder/copy* /target/path/ cp -Hrf /full/path/sourceFolder/copy* /target/path/ cp -Lrf /full/path/sourceFolder/copy* /target/path/

У меня заканчиваются идеи. Какой самый элегантный способ добиться этого?

0
Можете ли вы исправить свой пример? Иногда вы включаете `sourceFolder`, иногда нет. А также покажите, какой результат вы хотите? `cp path1 / * path2 /` приводит к тому, что символические ссылки в path1 копируются в обычные файлы в path2, для меня. Joe P 7 лет назад 0
Использование 4 пробелов в начале строк легче для блоков кодирования, чем использование большого количества символов `. Joe P 7 лет назад 1
Это кажется странной вещью, которую хочется сделать. Я ожидал бы требование, что копия создает неработающую ссылку, которая затем разрешается при копировании цели. Если вы хотите такого поведения, используйте жесткие ссылки. AFH 7 лет назад 0
исправил пути ... rrlamichhane 7 лет назад 0
Я не могу воссоздать проблему. Для меня работает простой `cp / full / path / sourceFolder / copy * / target / path /`, если я что-то не так понял. Получающиеся файлы являются обычными файлами с именами `copyA` и` copyB`. Мой тестовый стенд - Ubuntu 16.04.2 LTS. Kamil Maciorowski 7 лет назад 0
@kamil Вы победили меня. Кажется, что поведение по умолчанию `cp` xenoid 7 лет назад 0

0 ответов на вопрос

Похожие вопросы