一、基础选项
**-a / --archive**
功能:递归复制目录并保留所有属性(权限、时间戳、所有权等),等同于 -dR --preserve=all。
示例:cp -a /source /destination → 保留 /source 的目录结构及文件属性。
**-d / --dereference**
功能:复制符号链接本身而非其指向的文件。
示例:cp -d link.txt new_link.txt → new_link.txt 仍为符号链接。
**-f / --force**
功能:强制覆盖目标文件,忽略错误(如权限不足)。
注意:与 -n 选项冲突,-n 会覆盖 -f 的行为。
**-i / --interactive**
功能:覆盖前提示用户确认,防止误操作。
示例:cp -i file.txt new_file.txt → 若 new_file.txt 已存在,会提示 overwrite?。
**-l / --link**
功能:创建硬链接而非复制文件。
示例:cp -l original.txt link.txt → link.txt 是 original.txt 的硬链接。
**-p / --preserve**
功能:保留源文件的权限、所有权、时间戳等属性。
扩展:–preserve=all 还可保留 SELinux 上下文、扩展属性等。
二、递归与链接处理
**-r / -R / --recursive**
功能:递归复制目录及其子目录和文件。
示例:cp -r /source_dir /dest_dir → 复制整个目录树。
**-L / --dereference**
功能:始终跟随符号链接,复制链接指向的实际文件。
对比:-L 与 -d 作用相同,但 -d 是旧版语法。
**-H / --dereference-command-line**
功能:在命令行参数中的符号链接也会被解析。
示例:cp -H link.txt /dest → 复制 link.txt 指向的文件。
三、属性保留与备份
**–attributes-only**
功能:仅复制文件属性(如权限),不复制数据内容。
适用场景:批量修改文件权限或时间戳。
**–backup**
功能:覆盖前自动备份目标文件,支持多种备份策略。
策略:
numbered(默认):备份文件名后加 ~。
simple:备份文件名后加 ~(若无编号备份)。
off:不备份。
**-b / --backup**
功能:类似 --backup,但备份文件名后加 ~。
示例:cp -b file.txt new_file.txt → 若 new_file.txt 已存在,备份为 new_file.txt~。
四、覆盖控制与更新
**-n / --no-clobber**
功能:不覆盖已存在的目标文件,与 -i 效果类似。
示例:cp -n file.txt new_file.txt → 若 new_file.txt 存在,跳过复制。
**-u / --update**
功能:仅当源文件比目标文件新或目标文件不存在时才复制。
适用场景:增量备份或同步更新。
五、高级选项
**–reflink**
功能:启用 CoW(Copy-On-Write)技术,仅复制数据块差异。
参数:
always:强制使用 CoW。
auto:自动判断是否支持。
never:禁用 CoW。
**–sparse**
功能:优化稀疏文件的存储,减少磁盘占用。
示例:cp --sparse=always large_file.txt sparse_file.txt。
**–version-control**
功能:指定备份文件的命名方式(如 numbered、simple)。
示例:cp --version-control=simple file.txt backup/。
六、组合使用示例
递归复制并保留属性
bash
cp -a /source /destination # 保留权限、时间戳、目录结构1,2,6
强制覆盖并显示详细过程
bash
cp -f -v file.txt new_file.txt # 覆盖并输出每一步操作5,7
增量备份
bash
cp -u *.log /backup/ # 仅复制修改过的日志文件2,7
七、注意事项
权限问题
若目标目录无写权限,需使用 sudo:
bash
sudo cp -r /source /destination # 提升权限3,6
符号链接处理
默认行为(-P)会复制链接本身,使用 -L 可解析链接。
备份文件冲突
若备份文件名与现有文件冲突,–backup 会自动重命名。
引用说明
选项功能与示例:
SELinux 与 CoW 技术:
如需查看完整手册,可通过 man cp 或 cp --help 获取详细信息。