我注意到 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 中已经有一个名为“。”的条目。一般来说,您无法移动“。”(这就像尝试从内部移动盒子一样)。