cp -f 与 cp --remove-destination 有何不同?

ano*_*guy 10 linux cp

在 cp 联机帮助页中,它将 -f/--force 选项列为:如果无法打开现有目标文件,请将其删除并重试

对于 --remove-destination 选项,它说:在尝试打开每个现有目标文件之前删除它(与 --force 相比)

所以,前者首先检查是否可以打开,如果不能,则删除,而后者只是绕过该步骤。我将每个选项与 -i 选项结合使用,在这两种情况下,它都表示文件的权限是什么,如果它是写保护的。

后者似乎更有效,尤其是在递归复制/覆盖大目录时,但为什么要同时保留这两个选项?无论如何检查它会超越的东西有什么好处?

mur*_*uru 10

两者之间有区别(强调我的):

如果无法打开现有目标文件,请将其删除并在尝试打开之前再次尝试
删除每个现有目标文件

在第一种情况下,如果文件可以打开,cp将尝试仅替换内容。cp不会不必要地删除文件。这将保留原始文件的权限和所有权,除非您指定它们也将被复制。

当无法读取内容(例如悬空的符号链接)时,第二种情况很有用。


小智 6

并且:如果目标文件有多个链接(硬链接),--remove-destination 不会破坏其他链接的内容。而只是删除目标的链接(现在我们知道,为什么在更深层次的系统函数中将“删除”称为“取消链接”)并创建一个带有新 inode 的新文件。