cp -r 和 cp -R (复制命令)之间的区别

cp -r 和 cp -R (复制命令)之间的区别

cp -r意味着递归复制文件,以及cp -R递归复制目录。但我检查过,两者似乎都复制文件和目录,是同一件事。那么,实际上有什么区别呢?

答案1

虽然-Rposix 定义明确,-r但不可移植!

在 Linux 上,在 GNU 和 BusyBox 中cp-r和的实现-R是等效的。

另一方面,正如您可以在POSIX的手册页cp-r行为是实现定义的

    * If  neither  the  -R  nor  -r  options were specified, cp shall take
      actions based on the type and contents of the file referenced by the
      symbolic link, and not by the symbolic link itself.

    * If the -R option was specified:

       * If  none  of  the  options  -H,  -L, nor -P were specified, it is
         unspecified which of -H, -L, or -P will be used as a default.

       * If the -H option was specified, cp shall take  actions based on
         the type and contents of the file referenced by any symbolic link
         specified as a source_file operand.

       * If the -L option was specified, cp shall take  actions based  on
         the type and contents of the file referenced by any symbolic link
         specified as a source_file operand or any symbolic links encoun-
         tered during traversal of a file hierarchy.

       * If  the  -P option was specified, cp shall copy any symbolic link
         specified as a source_file operand and any symbolic links encoun-
         tered  during traversal of a file hierarchy, and shall not follow
         any symbolic links.

    * If the -r option was  specified,  the  behavior  is implementation-
      defined.

答案2

Lowercase-r是一个较旧的选项,在 4.1BSD 中引入,它只会将所有非目录复制为文件。也就是说,如果它遇到设备或 FIFO,它将打开它,读取内容,并在目的地创建一个包含内容的文件。

Uppercase-R是一个标准化选项(在 4.4BSD 中引入到 BSD,尽管早期版本将其作为 的同义词-r),当遇到设备、FIFO 或其他特殊文件时,它会在目的地创建一个等效的特殊文件。

许多实现仍然保留了这种区别,但有些(包括 Linux 典型的 GNU 版本)仅提供语义-R-r作为同义词。

答案3

区别在于,一个使用小写“R”,另一个使用大写“R”。除此之外,没有什么区别。如果您使用--recursive长选项,同样的情况。

答案4

我发现 -r 不复制隐藏目录,而 -R 复制隐藏目录的区别之一。

我在目标目录中测试了它的.git目录并得出了上述结论。我目前使用的是centOS。

我可能是错的,但这是可以讨论的。

相关内容