Проблема
Копіюючи файли з 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!
Ця відповідь описує обидва варіанти як подібні БЕЗПЕЧНІ, що використовуються в поєднанні з -R
. Не для мене. Файли з м'яким посиланням перейменовані на копії файлів, на які вони вказують у джерелі.
Питання :
У чому полягає правильне використання cp -H
та cp -L
? Це очікувана поведінка?
Моя спроба вирішити :
man cp
каже мені абсолютно однакові для обох варіантів, але info cp
«s формулювання робить його ще більш заплутаною для мене. Можливо, хтось може допомогти мені трохи розбити це:
-H
Якщо аргумент командного рядка вказує символічне посилання, скопіюйте файл, на який він вказує, а не саме символічне посилання . Однак скопіюйте (зберігаючи його природу) будь-яке символічне посилання, що зустрічається за допомогою рекурсивного обходу.
Для мене це звучить як протиріччя: я думаю, що "природа символічної ланки " полягає в тому, що вона десь вказує ...
-L, --dereference
Дотримуючись символьних посилань, копіюючи з них. За допомогою цієї опціїcp
не можна створити символічне посилання. Наприклад, символьне посилання (до звичайного файлу) у вихідному дереві буде скопійовано у звичайний файл у дереві призначення.
Я знаю, що симпосилання не є звичайним файлом, але… Зізнаюся, тут я перестала бути спрощеною цим поясненням.
info cp
і намагався розібратися, що насправді означає вибір слів у цьому варіанті & ndash; і про яку йдеться у цій публікації. У публікації також міститься фактичне формулювання від info cp
- таким чином я, мабуть, принаймні відкрив її…;)
info cp
, шукай-R
. У ньому написано,Copy directories recursively.
але ви тестуєте з не-каталогів. Різниця полягає в тому, що знаходиться всередині каталогів, які ви копіюєте, а не в аргументах командного рядка.