目录的 -r 标志现在似乎毫无用处

目录的 -r 标志现在似乎毫无用处

cpscprm其他命令需要标志来-r对目录执行操作,而不仅仅是对文件执行操作。

无法复制目录,因为 WHOOPS 你忘记了 -r 标志

我觉得这不再相关。这些程序应该只是被编写为有条件地别名旧命令。如果d它是一个目录并执行递归目录移动命令

还有其他原因导致它不应该是默认设置吗?其他标志组合是否需要该-r标志,否则它将不起作用?

答案1

还有其他原因导致这不应该是默认的吗?

如果cp/rm真的那么“聪明”,那么当您只想复制或删除一个文件时,一个命令中的简单拼写错误就可能递归处理某个“随机”目录。没错,拼写错误仍然可能导致错误的文件被删除,但“一个文件”与“整个目录树”可能会产生巨大的差异。

这不一定是拼写错误;它可以是这样的命令中的(错误的)空变量:

rm "/mountpoint/bigdir/$smallfile"

cp即使发生类似事故,它们也并非完全安全,因为它们可能会覆盖目标文件。因此,并不是scp只要删除不需要的副本,问题就解决了。

mv请注意,此论点也适用于。由于历史原因,此特定工具有所不同:

的一些历史版本mv可以移动目录,但不能移动到不同的文件系统。标准开发人员认为这是一个令人讨厌的不一致之处,因此 POSIX.1-2017 的这一卷要求目录能够跨文件系统移动。没有-R选项可以确认移动目录是否是实际意图,因为在历史实践中移动目录不需要这样的选项。有时要求应用程序根据目标指定它似乎同样不一致。

来源

移动文件(可能是目录) 在单个(基于 inode 的)文件系统中根本不是递归的。只有父目录(新目录和旧目录(它们可以相同))被更改。mv即使移动目录,这种最基本和最古老的用法也不是递归的。我认为链接文章中写着“有时,取决于目的地”,这意味着-R当目的地位于不同的文件系统中时是合理的,但当目的地位于同一文件系统中时则完全不合理。选择不引入-R(或-r或其他)。这种方式mv在设计上遵循了您的假设。


这些程序应该被编写为有条件地为旧命令添加别名

请注意,当指定单个文件时,-r仍然是允许的。因此不需要“有条件地”,并且您可以简单地使用 将相关命令别名化为其形式-r,如果这确实是您想要的。

相关内容