проблема
При копировании файлов с помощью cp -H
или cp -L
я получаю те же результаты:
$ ls -l fileA
fileA -> fileB
$ cp fileA somewhere/ -H
$ ls -l somewhere/
fileA # fileA is a copy of fileB, only renamed, with same properties!
Этот ответ здесь описывает оба варианта как аналогичные UNLESS, используемые в сочетании с -R
. Не для меня. Мягкие - файлы с жесткими ссылками становятся переименованными копиями файлов, на которые они указывают в источнике.
Вопрос :
Что такое правильное использование cp -H
и cp -L
? Это ожидаемое поведение?
Моя попытка решить :
man cp
говорит мне совершенно одинаковы для обоих вариантов, но info cp
«s формулировка делает его еще более запутанной для меня. Может быть, кто-нибудь поможет мне разобраться в этом немного:
-H
Если аргумент командной строки указывает символическую ссылку, скопируйте файл, на который он указывает, а не саму символическую ссылку . Тем не менее, скопируйте (сохраняя природу) любую символическую ссылку, которая встречается при рекурсивном обходе.
Это звучит как противоречие для меня: я предполагаю, что « характер символической ссылки» заключается в том, что она указывает куда-то ...
-L, --dereference
При копировании с них следуйте по символическим ссылкам. С этой опциейcp
невозможно создать символическую ссылку. Например, символическая ссылка (на обычный файл) в исходном дереве будет скопирована в обычный файл в дереве назначения.
Я действительно знаю, что символическая ссылка не является обычным файлом, но ... я признаю, что здесь слишком много объяснений.
info cp
, ищи-R
. Это говорит,Copy directories recursively.
но вы тестируете с не-каталогами. Разница в том, что внутри копируемых каталогов, а не аргументов командной строки.info cp
и изо всех сил пытался выяснить, что на самом деле означает выбор слов в этой опции & ndash; и о чем эта публикация. Публикация также содержит фактическую формулировкуinfo cp
- таким образом, я, по крайней мере, должен был ее открыть…;)Ответы:
С символическими ссылками инструменты могут делать две вещи:
Сказать, что
-H
«сохраняет свою природу» не является противоречием. Рассмотрим альтернативу. Если вы используете-L
, любыеcp
находки символических ссылок будут открыты, а их содержимое скопировано в целевое имя файла. Таким образом, источник был символической ссылкой, но его копия не является символической ссылкой. Так что он "потерял свою природу как символическая ссылка".Рассмотреть возможность
источник
Разница в поведении между
-L
и-H
приходит, когда-r
это также указано.cp
не будет создавать символические ссылки в подкаталогах,-L -r
но будет, если вы используете-H -r
.источник