商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何在 Linux 环境利用 cp -r 命令实现对整个文件夹及其内容的递归拷贝

如何在 Linux 环境利用 cp -r 命令实现对整个文件夹及其内容的递归拷贝

  发布于2026-07-08 阅读(0)

扫一扫,手机访问

在 Linux 下干活,拷贝文件夹是个家常便饭。但你试过直接 cp 文件夹A 文件夹B 吗?系统大概率会甩你一句“略过了一个目录”,然后啥也不干。这时候,就得请出那个关键的 -r 参数了。

如何在 Linux 环境利用 cp -r 命令实现对整个文件夹及其内容的递归拷贝

说白了,cp -r 是 Linux 里处理“整个目录搬家”的标准答案。理解它的关键在于吃透 -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 -a v --delete /source/ /dest/(注意末尾斜杠的含义,它决定了复制的是目录本身还是目录内容)。

话说回来,cp -r 胜在基础、轻量,不需要额外安装。本地快速整目录拷贝用它最顺手。但它不擅长处理冲突自动合并,也不适合网络传输。知道什么时候该用它,什么时候该换 rsync,这才是关键。

本文转载于:https://www.php.cn/faq/2423267.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注