cp -H 与 cp -L(什么是“命令行”符号链接?)

cp -H 与 cp -L(什么是“命令行”符号链接?)

我的操作系统在 cp 的手册页中声明了以下内容:

   -H     follow command-line symbolic links

   -L, --dereference
          always follow symbolic links

我很难弄清楚“命令行符号链接”是。

答案1

命令行符号链接并不存在。手册页引用命令行上出现的链接,即作为cp命令。

如果没有开关,和-R的行为是相同的。cp -Hcp -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/

相关内容