命令 "cp -P" 和 "cp -d" 之间有区别吗?

Is there a difference between commands "cp -P" and "cp -d"?

man cp 说:

-d 与 --no-dereference --preserve=links

相同

-P, --no-dereference 从不跟在 SOURCE

中的符号 link 之后

我测试了这两个选项,发现它们在实践中是相同的。无论符号(软)link 是否有效,两者都只保留符号 links。

有什么想法吗?

谢谢。

它们对符号链接有相同的作用。但是 -d 具有保留硬链接的附加效果。也就是说,对于 -d--preserve=links,如果 cp 的调用遇到指向同一文件的多个链接,它将在目标中创建指向同一文件的多个链接。通常 cp 不会注意硬链接,如果两个源文件是硬链接,则会创建恰好具有相同内容的文件。

$ touch foo
$ ln foo bar
$ mkdir d; cp -d foo bar d
$ mkdir P; cp -P foo bar P
$ ls -log d P
P:
total 0
-rw-rw-r-- 1 0 Apr 11 17:09 bar
-rw-rw-r-- 1 0 Apr 11 17:09 foo

d:
total 0
-rw-rw-r-- 2 0 Apr 11 17:09 bar
-rw-rw-r-- 2 0 Apr 11 17:09 foo