Моя ОС сообщает следующее на странице 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/
.