名称
cp - 复制文件或目录
简介
cp [选项]... 源文件 目标文件
cp [选项]... 源文件... 目标目录
cp [选项]... -t 目标目录 源文件...描述
cp 命令将 源文件 复制到 目标文件,或者将多个 源文件 复制到 目标目录 中。复制时可以选择是否保留文件属性(如权限、时间戳),并支持递归复制目录。
基本行为:
如果指定两个文件名,
cp将第一个文件复制为第二个文件。如果最后一个参数是已存在的目录,
cp将每个源文件复制到该目录下(保持原名或指定新名)。复制目录时必须使用
-r、-R或--recursive选项。
选项
退出状态
0 – 成功。
>0 – 发生错误(例如源文件不存在、目标无法写入等)。
常用示例
1. 复制单个文件
cp file.txt file_backup.txt2. 将文件复制到目录
cp file.txt /path/to/destination/3. 复制多个文件到目录
cp file1.txt file2.txt file3.txt /target/dir/4. 递归复制目录
cp -r /source/dir /target/dir注意:如果目标目录已存在,会将源目录复制到目标目录下(形成 /target/dir/source/dir);如果目标目录不存在,则创建目标目录并将源内容放入其中。
5. 交互式覆盖提示
cp -i source.txt target.txt如果 target.txt 存在,会询问是否覆盖。
6. 复制并保留文件属性(权限、时间戳)
cp -p file.txt file_backup.txt7. 归档模式复制(保留所有属性,递归)
cp -a /source/dir /target/dir8. 仅更新较新的文件
cp -u source.txt target.txt只有当 source.txt 比 target.txt 新或 target.txt 不存在时才复制。
9. 创建硬链接而非复制
cp -l file.txt file_hardlink10. 创建符号链接
cp -s /absolute/path/to/file.txt symlink11. 复制前备份已有文件
cp -b file.txt file.txt # 生成 file.txt~ 作为备份
cp --backup=numbered file.txt file.txt # 生成 file.txt.~1~ 等编号备份12. 复制并显示详细信息
cp -v file.txt /dest/13. 保留路径结构(--parents)
cp --parents dir/subdir/file.txt /target/这将创建 /target/dir/subdir/file.txt。
14. 强制覆盖且不提示(默认行为,除非设置了别名)
cp -f source.txt target.txt15. 不覆盖已存在文件
cp -n source.txt target.txt如果 target.txt 存在,则不执行复制。
16. 复制符号链接本身(而非指向的文件)
cp -d symlink symlink_copy这会将符号链接作为链接复制,而不是复制它指向的真实文件。
17. 组合选项:递归、保留属性、详细输出
cp -rpv /source/dir /target/dir注意事项
覆盖风险:默认情况下,
cp会静默覆盖目标文件(除非设置了别名如alias cp='cp -i')。使用-i或-n可避免意外覆盖。目录复制:复制目录必须使用
-r或-a,否则会报错(“省略目录”)。符号链接:
默认行为是跟随符号链接,复制其指向的文件(类似
-L)。使用
-d或-P复制链接本身。
权限保留:普通用户复制文件时,新文件权限通常受
umask影响。使用-p或-a可尝试保留源文件权限和时间戳,但可能因用户权限限制无法保留所有属性(如所有权可能需要 root)。跨设备复制:在不同文件系统间复制时,硬链接(
-l)可能无法创建,会回退为普通复制。备份策略:使用
-b或--backup可以防止覆盖重要数据,但备份文件可能堆积,需定期清理。使用
-t简化:当源文件列表较长时,-t选项允许将目标目录写在前面,便于配合find等命令:bash
find . -name "*.txt" -exec cp -t /dest/dir/ {} +
mv– 移动或重命名文件。rm– 删除文件或目录。相关命令
ln– 创建链接(硬链接或符号链接)。rsync– 高级文件复制和同步工具(支持增量、远程复制)。scp/sftp– 通过 SSH 远程复制文件。install– 复制文件并设置属性,常用于安装程序。dd– 低级别复制和转换。