什么时候不希望 `cp` 是递归的?

dot*_*hen 7 bash cp

在什么情况下可能希望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)

我确实意识到我可以别名cpcp -r但我的目标是了解原因是什么,而不是解决任何问题。

ter*_*don 5

我经常只想复制一个目录中的文件,为什么这让你觉得奇怪?这取决于您要尝试做什么。例如,有时我会将我用于项目的所有文件放在一个目录中,说这些文件是我的程序运行所必需的。我可能还有各种带有旧版本或数据文件或其他内容的子目录。如果我想将它传输到服务器以运行我的程序,我只需要文件而不是子目录,因此cp默认值正是我需要的。

除了有时您希望递归复制这一简单事实外,一般来说,几乎所有程序都需要显式启用递归。这是标准,这是用户第一次使用该程序时所期望的。因此,将递归设为默认值并不是一个好主意。需要添加一个-r标志递归是预期的行为,一般你不想在默认情况下递归(认为chmodgrepls等)。

  • @RaphaelAhrens 它不是真的,当你`mv`一个目录时,你本质上是在重命名它,命令不是递归的。 (3认同)