在 cp 联机帮助页中,它将 -f/--force 选项列出为:如果无法打开现有目标文件,请将其删除并重试
对于 --remove-destination 选项,它表示:在尝试打开每个现有目标文件之前删除它(与 --force 对比)
因此,前者首先检查是否可以打开,如果不能打开,则无论如何都会删除,而后者只是绕过该步骤。我将每个选项与 -i 选项结合起来,在这两种情况下,它都指示文件被写保护时的权限。
后者似乎更有效,特别是在递归复制/覆盖大型目录的情况下,但为什么要保留这两个选项呢?检查它无论如何都会覆盖的东西有什么好处?
答案1
两者之间有区别(强调我的):
如果无法打开现有目标文件,请将其删除,然后再次尝试
删除每个现有目标文件在尝试打开它之前
在第一种情况下,如果文件可以打开,cp
将尝试仅替换内容。cp
不会不必要地删除该文件。这将保留原始文件的权限和所有权,除非您指定也要复制它们。
第二种情况在内容无法读取时很有用(例如悬空符号链接)。
答案2
并且:如果目标文件有多个链接(硬链接),--remove-destination 不会破坏其他链接的内容。相反,只是删除目标的链接(现在我们知道,为什么“删除”在更深层次的系统函数中被称为“取消链接”),并创建一个具有新索引节点的新文件。