cp -r
意味着递归复制文件,以及cp -R
递归复制目录。但我检查过,两者似乎都复制文件和目录,是同一件事。那么,实际上有什么区别呢?
答案1
虽然-R
posix 定义明确,-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。
我可能是错的,但这是可以讨论的。