我的操作系统在 cp 的手册页中声明了以下内容:
-H follow command-line symbolic links
-L, --dereference
always follow symbolic links
我很难弄清楚“命令行符号链接”是。
答案1
命令行符号链接并不存在。手册页引用命令行上出现的链接,即作为cp命令。
如果没有开关,和-R
的行为是相同的。cp -H
cp -L
使用该-R
开关,cp -H
仅取消引用出现在cp命令本身,同时-L
还取消引用递归复制目录内的符号链接。
命令
cp -R -H source/ dest/
将复制目录来源以及目录中的所有内容目的地。 如果来源是目录的符号链接,cp 将取消引用该符号链接,即复制目录来源指向。但是,如果 cp 遇到任何符号链接来源的子目录,它将在目标文件夹中创建符号链接。
命令
cp -R -L source/ dest/
行为类似。不过,它还会取消引用符号链接来源的子目录,即复制这些符号链接指向的文件。
答案2
该-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/
。