如果名为done的文件已经存在,当您发出以下命令时会发生什么?
$ cp to_do done
$ mv to_do done
答案1
done
将被替换为内容to_do
您可以通过一个简单的测试来检查:
$ echo a > done
$ echo b > to_do
$ cp to_do done
$ cat done
b
和
$ echo a > done
$ echo b > to_do
$ mv to_do done
$ cat done
b
编辑
根据评论一些附加信息
done
done
如果或是目录,则不会被替换to_do
。如果done
是目录,则文件to_do
将被移动/复制在目录。如果to_do
是目录,您将收到错误消息- 使用
-i
您可以指示mv
并cp
在覆盖文件时发出警告的选项 - 在某些发行版上
cp
, and是andmv
的别名(特别是对于 root 用户)cp -i
mv -i
答案2
假设我们在这里讨论的是常规文件,在以下情况下:
cp to_do done
如果done
不可写,您将收到一条错误消息。否则,内容to_do
将被复制超过 done
。这意味着done
保持相同的索引节点、权限、所有权、出生时间。 (-p
或-a
在某些实现中)将尝试复制 的一些属性to_do
。
和:
cp -f to_do done
如果您没有对 的写访问权限done
,cp
将首先取消链接done
(只要您对当前目录有写访问权限并且当前目录没有设置位,您就可以执行此操作t
)并创建一个新的一个。cp
将尝试复制尽可能多的属性to_do
,就像done
事先不存在一样。
和
mv to_do done
to_do
刚刚更名。仅修改当前目录。如果done
事先存在,则会先取消链接。