Linux 上目录“.”的 mv/cp 行为异常

Linux 上目录“.”的 mv/cp 行为异常

我注意到 Linux 上的 mv/cp 行为很奇怪。目录 A 和 A/. 应该是等效的,但作为源的参数,它们的行为似乎不同。这是错误吗?当然,您可能会问为什么我应该使用 A/. 而不是 A 作为源,但有时人们想要使用“。”作为源,同样奇怪的事情也会发生……也许有人知道答案。

让我们从

$ mkdir A A/A1 B

现在

变体 1)

$ cp -r A B
$ ls B
A

好的。

变体 2)

$ cp -r A/. B
$ ls B
A1

为什么是“A1”而不是“A”?

变体 3)

$ mv A B
$ ls B
A

好的。

变体 4)

$ mv -i A/. B
mv: overwrite `B/.'? y
mv: cannot move `A/.' to `B/.': Device or resource busy

奇怪的...

答案1

“A” 和 “A/.” 都是指向同一事物的目录条目,但它们本身是不同的东西。“A” 是当前目录中的条目,而 “A/.” 是 A 目录中名为 “.” 的条目。可以将其视为从外部对盒子进行操作,而不是从内部对盒子进行操作。

具体来说,

cp-r AB

将 A 复制到 B。

cp -r A/。乙

进入目录 A 并将当前目录(即 ./A1)的内容复制到 B。

AB 值

将名为“A”的目录条目从当前目录移动到 B。

mv-i A/. B

尝试将目录条目“。”从 A 移到 B。但是,B 中已经有一个名为“。”的条目。一般来说,您无法移动“。”(这就像尝试从内部移动盒子一样)。

相关内容