cp -r 是 linux 中递归复制整个目录的标准命令,-r 参数使 cp 进入子目录逐层复制所有内容(含隐藏文件、符号链接等),无此参数则拒绝复制目录;基本语法为 cp -r [源目录] [目标位置],目标不存在时新建同名目录,存在且为目录时嵌套存放,存在且为文件则报错;默认不保留权限、所有者等元数据,需加 -p 选项;大量文件可加 -v 或 -n,复杂同步推荐 rsync。

cp -r 是 Linux 中复制整个目录(含子目录和所有文件)的标准方式,关键在于理解 -r(或等价的 -R)参数的含义与使用边界。
明确 -r 参数的作用
-r 表示“递归(recursive)”,它告诉 cp 命令:遇到目录时不要报错跳过,而是进入该目录,逐层复制其中所有内容(包括隐藏文件、符号链接、子目录等)。没有这个选项,cp 默认拒绝复制目录,仅处理普通文件。
基本语法与常见用法
格式为:cp -r [源目录] [目标位置]
- 若目标位置不存在,cp -r 会以源目录名为名,在目标路径下创建新目录并复制全部内容
- 若目标位置已存在且是目录,cp -r 会把源目录作为子目录放入目标目录中(即 目标/源目录名)
- 若目标位置已存在且是普通文件,命令会失败(不允许覆盖文件为目录)
例如:cp -r /home/user/project /backup/ → 复制后路径为 /backup/project/
需要注意的细节
cp -r 默认不保留原始权限、所有者、时间戳等元数据。如需完整镜像,应加上 -p(preserve)选项:cp -rp
- -p 等效于 -dpR,可保留权限、所有权(需有相应权限)、时间戳、符号链接本身(而非链接指向的内容)
- 若源目录含硬链接,cp -r 默认会复制为独立文件;加 -H 或 -L 可控制对符号链接的处理方式
- 复制大量小文件时,可加 -v 查看进度,加 --no-clobber(或 -n)避免意外覆盖已有文件
替代方案与补充说明
对于更复杂的同步需求(如增量复制、排除特定文件、跨主机传输),rsync 更灵活可靠,例如:rsync -av --delete /source/ /dest/(注意末尾斜杠含义)
cp -r 是基础、轻量、无需额外安装的方案,适合本地快速整目录拷贝,但不处理冲突自动合并或网络传输。











