cp 和 mv 如果指定的文件已存在

cp 和 mv 如果指定的文件已存在

如果名为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

编辑

根据评论一些附加信息

  • donedone如果或是目录,则不会被替换to_do。如果done是目录,则文件to_do将被移动/复制目录。如果to_do是目录,您将收到错误消息
  • 使用-i您可以指示mvcp在覆盖文件时发出警告的选项
  • 在某些发行版上cp, and是andmv的别名(特别是对于 root 用户)cp -imv -i

答案2

假设我们在这里讨论的是常规文件,在以下情况下:

cp to_do done

如果done不可写,您将收到一条错误消息。否则,内容to_do将被复制超过 done。这意味着done保持相同的索引节点、权限、所有权、出生时间。 (-p-a在某些实现中)将尝试复制 的一些属性to_do

和:

cp -f to_do done

如果您没有对 的写访问权限donecp将首先取消链接done(只要您对当前目录有写访问权限并且当前目录没有设置位,您就可以执行此操作t)并创建一个新的一个。cp将尝试复制尽可能多的属性to_do,就像done事先不存在一样。

mv to_do done

to_do刚刚更名。仅修改当前目录。如果done事先存在,则会先取消链接。

相关内容