Проблема
Копіюючи файли з 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.але ви тестуєте з не-каталогів. Різниця полягає в тому, що знаходиться всередині каталогів, які ви копіюєте, а не в аргументах командного рядка.