在什么情况下可能希望cp
在目录上使用该命令但它不是递归的?考虑:
$ tree
.
??? old
??? inner
??? a.txt
2 directories, 1 file
$ cp old/inner/ .
cp: omitting directory `old/inner/'
$ tree
.
??? old
??? inner
??? a.txt
2 directories, 1 file
Run Code Online (Sandbox Code Playgroud)
那到底做了什么?那么为什么人们永远不会使用该-r
标志,因此为什么不指定它就暗示它呢?请注意,该-r
标志对常规文件没有不良影响:
$ cp -r old/inner/a.txt .
$ ls
a.txt old
Run Code Online (Sandbox Code Playgroud)
我确实意识到我可以别名cp
,cp -r
但我的目标是了解原因是什么,而不是解决任何问题。
我经常只想复制一个目录中的文件,为什么这让你觉得奇怪?这取决于您要尝试做什么。例如,有时我会将我用于项目的所有文件放在一个目录中,说这些文件是我的程序运行所必需的。我可能还有各种带有旧版本或数据文件或其他内容的子目录。如果我想将它传输到服务器以运行我的程序,我只需要文件而不是子目录,因此cp
默认值正是我需要的。
除了有时您不希望递归复制这一简单事实外,一般来说,几乎所有程序都需要显式启用递归。这是标准,这是用户第一次使用该程序时所期望的。因此,将递归设为默认值并不是一个好主意。需要添加一个-r
标志递归是预期的行为,一般你不想在默认情况下递归(认为chmod
或grep
或ls
等)。