cp命令中-a参数的作用是实现归档复制,等同于同时指定-dpr参数,即递归复制目录、保留文件属性(权限、时间戳、所有者等)及符号链接本身。

要用 cp 命令递归复制整个目录并保留原始属性(如权限、所有者、时间戳、符号链接等),最直接有效的方式是使用 -a 参数。
用 cp -a 一次性完成递归 + 属性保留
-a(archive 模式)是专为完整镜像设计的选项,它等价于 -d -r -p 的组合:
- -r:递归处理目录及其所有子目录和文件
- -p:保留权限、所有者、所属组、访问/修改时间等元数据
- -d:保留符号链接本身(不跟随链接去复制目标内容)
例如,把 myproject/ 完整复制到 /backup/ 并保持全部结构与属性:
为什么不用分开写 -r 和 -p?
单独加 -r -p 能满足大部分需求,但缺了 -d —— 遇到符号链接时,默认会复制链接指向的文件内容,而不是链接本身。-a 自动涵盖这点,更适合备份或迁移场景。如果明确知道目录里没有符号链接,-rp 也够用。
注意目标路径的斜杠习惯
复制目录时,源路径末尾加不加 / 会影响行为:
-
cp -a dir1/ /target/ → 把
dir1下的内容复制进/target/ -
cp -a dir1 /target/ → 把整个
dir1目录(含名字)复制成/target/dir1
多数情况下推荐带斜杠写法,避免多套一层目录。
补充:遇到只读文件系统或权限不足怎么办?
-a 要求对源文件有读取权限、对目标位置有写入权限。若提示 Permission denied:
- 确认目标目录可写(
ls -ld /target) - 必要时用
sudo cp -a ...(仅当你是管理员且确实需要) - 注意某些文件系统(如 FAT32、exFAT)不支持 Linux 权限模型,此时 -p 或 -a 中的权限部分会被忽略

















