Моя ОС сообщает следующее на странице man cp:
-H follow command-line symbolic links
-L, --dereference
always follow symbolic links
Мне трудно понять, что такое "символическая ссылка командной строки ".
Моя ОС сообщает следующее на странице man cp:
-H follow command-line symbolic links
-L, --dereference
always follow symbolic links
Мне трудно понять, что такое "символическая ссылка командной строки ".
Нет такой вещи как символическая ссылка командной строки. Страница man ссылается на ссылки, которые появляются в командной строке, т. Е. Как аргументы команды cp .
Без ключа -R поведение cp -H и cp -L идентично.
С ключом -R cp -H разыменовывает только символические ссылки, которые встречаются в самой команде cp , тогда как -L также разыменовывает символические ссылки внутри рекурсивно скопированных каталогов.
Команда
cp -R -H source/ dest/
скопирует источник каталога и все его содержимое в каталог dest. Если источник является символической ссылкой на каталог, cp будет разыменовывать символическую ссылку, то есть копировать источник каталога, на который указывает источник. Однако, если ф встречает любые символические ссылки в подкаталогах исходных «s, она будет создавать символические ссылки в папке назначения.
Команда
cp -R -L source/ dest/
ведет себя аналогично. Тем не менее, он также будет разыменовать симлинками в подкаталогах исходных «s, т.е. скопировать файлы эти символические ссылки указывают.
Опция -H для cp изменяет поведение -R (рекурсивное копирование) следующим образом:
Если -H не передается, а исходный путь, указанный в командной строке, является символической ссылкой на каталог, то ссылка будет скопирована в целевой путь.
Если -H передается, и путь к источнику и пр., И пр., То ссылка будет разыменовываются и ссылки каталог рекурсивно копируются в путь назначения.
Это не очень помогает, я думаю; возможно, пример прояснит это лучше. (В ls -pF завершающий / указывает каталог, а завершающий @ обозначает символическую ссылку.)
1 me@box tmp $ for dir in foo bar; do mkdir $dir; done
2 me@box tmp $ ls -pF
bar/ foo/
3 me@box tmp $ touch foo/file
4 me@box tmp $ ln -s foo baz
5 me@box tmp $ ls -pF
bar/ baz@ foo/
6 me@box tmp $ cp -R baz bar
7 me@box tmp $ ls -pF bar
baz@
8 me@box tmp $ unlink bar/baz
9 me@box tmp $ cp -HR baz bar
10 me@box tmp $ ls -pFR bar
bar:
baz/
bar/baz:
file
11 me@box tmp $
Видишь, как это работает? В строке 6 я ввел cp -R без опции -H , и символическая ссылка baz была скопирована в bar/ . Затем в строке 9 я выдал cp -HR и разыменовал cp baz и рекурсивно скопировал его содержимое (то есть содержимое foo/ , как показано в строке 4) в bar/ .