命令 "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
man cp
说:
-d
与 --no-dereference --preserve=links
-P, --no-dereference
从不跟在 SOURCE
我测试了这两个选项,发现它们在实践中是相同的。无论符号(软)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