当前位置:首页>Linux>Linux命令每日一清单034:cp--文件复制命令速查表

Linux命令每日一清单034:cp--文件复制命令速查表

  • 2026-09-02 19:05:45
Linux命令每日一清单034:cp--文件复制命令速查表

cp(copy)是Linux/Unix系统中用于复制文件和目录的基础命令。它能够在同一位置创建文件副本,或在不同目录之间复制文件,是文件管理中最常用的命令之一。

cp命令支持单文件复制、多文件复制、递归目录复制等多种操作模式,并提供丰富的选项来控制覆盖行为、保留文件属性、创建链接等。掌握cp是日常文件管理和脚本编写的基础技能。

1. 基本语法

命令说明
cp [options] source dest
将单个文件复制到目标
cp [options] source... directory
将多个源复制到目录中
cp -r [options] source dest
递归复制目录
cp -- file.txt dest/
复制以-开头的文件
cp -v file.txt dest/
显示详细复制信息

2. 复制文件

命令说明
cp file.txt /tmp/
将文件复制到其他目录
cp file.txt newname.txt
在同一目录中复制并重命名
cp file1.txt file2.txt /backup/
复制多个文件到目录
cp *.log /var/log/archive/
复制匹配模式的所有文件
cp /src/file.txt /dest/newname.txt
复制并重命名到其他目录
cp -R . /backup/
复制当前目录下所有文件(不包括.和..)

3. 复制目录

命令说明
cp -r directory/ /dest/
递归复制目录
cp -r dir1 dir2 /dest/
复制多个目录
cp -r /src/dir /dest/dir-new
复制并重命名目录
cp -r dir/. /dest/
仅复制目录内容(不包括目录本身)
cp -r dir/ /dest/dir/
将目录内容合并到目标目录
cp -a /src/dir /dest/
归档模式复制(保留所有属性)

4. 覆盖控制

选项说明
-i
覆盖前提示确认(交互模式)
-n
永不覆盖已存在的文件
-f
强制覆盖,不提示
-u
仅当源文件更新时才复制
-b
覆盖前创建备份(原文件~后缀)
-S .bak -b
指定备份后缀为.bak

示例:

cp -i file.txt dest/     # 覆盖前询问cp -n file.txt dest/     # 如果dest/file.txt存在则跳过cp -u file.txt dest/     # 仅当源文件更新时复制cp -b file.txt dest/     # 覆盖前创建file.txt~备份

5. 保留属性

选项说明
-p
保留文件模式、所有权和时间戳
-a
归档模式(-dR --preserve=all)递归并保留所有属性
-d
保留链接和链接指向
--preserve=timestamps
仅保留时间戳
--preserve=mode
仅保留权限
--preserve=ownership
仅保留所有权
--preserve=all
保留所有属性

-a vs -p 区别:

  • -p:保留属性(不递归)
  • -a:归档模式 = -dR --preserve=all(递归+保留所有属性+保留链接)

6. 创建链接

选项说明
-s
创建符号链接(而非复制)
-l
创建硬链接(而非复制)
-s -f
强制覆盖已存在的符号链接
-s target link_name
创建指向target的符号链接

示例:

cp -s /path/to/target link_name   # 创建符号链接cp -l file.txt hardlink.txt       # 创建硬链接

7. 实用组合模式

命令说明
cp file.txt{,.bak}
使用花括号扩展快速创建备份
cp -v file.txt dest/
详细输出(显示复制了什么)
cp -rv dir/ dest/
详细递归复制输出
cp -a /src/. /dest/
镜像目录,保留所有属性
find . -name '*.conf' -exec cp -t /backup/ {} +
查找并复制匹配的文件到备份目录
cp -u *.log /backup/
仅复制更新的日志文件
cp --parents file1.txt file2.txt dest/
复制并保留目录结构
cp -r --no-target-directory src/ dest/
将src内容复制到dest(不创建src目录)

8. 高级复制选项

选项说明
-R
递归复制(同-r)
-L
跟随符号链接(复制链接指向的文件)
-P
不跟随符号链接(复制链接本身,默认)
--parents
保留源文件的目录结构
-T
将目标视为普通文件(而非目录)
-t
指定目标目录(适合与find配合)
-x
停留在当前文件系统内(不跨越挂载点)
--remove-destination
复制前删除已存在的目标文件

-t 用法示例:

# 将目标目录放在前面find . -name "*.log" -exec cp -t /backup/ {} +

9. 常用选项速查

选项完整名称说明
-r
--recursive
递归复制目录
-R
--recursive
同-r
-i
--interactive
覆盖前提示
-n
--no-clobber
不覆盖已存在的文件
-f
--force
强制覆盖
-u
--update
仅复制更新的文件
-p
--preserve
保留属性(模式、所有权、时间戳)
-a
--archive
归档模式(-dR --preserve=all)
-v
--verbose
显示详细信息
-b
--backup
覆盖前创建备份
-s
--symbolic-link
创建符号链接
-l
--link
创建硬链接
-L
--dereference
跟随符号链接
-T
--no-target-directory
将目标视为文件
-t
--target-directory
指定目标目录

10. cp vs mv 对比

操作cpmv
原文件状态
复制后原文件保留
移动后原文件消失
磁盘空间
占用额外磁盘空间
不占用额外空间(同文件系统)
速度
较慢(需要复制数据)
快(同文件系统)
元数据
默认可能改变时间戳
保留原有属性
跨文件系统
直接复制
执行复制+删除

11. 故障排查

问题解决方法
cp: omitting directory
复制目录需添加-r或-a选项
Permission denied
检查源文件读权限和目标目录写权限;使用sudo
No such file or directory
用ls -l source验证源路径是否正确
目标文件被意外覆盖
使用-i或-n保护现有文件
属性没有保留
使用-a或-p保留所有属性和时间戳
复制大量小文件很慢
使用tar打包后传输:`tar cf - . | (cd /dest && tar xf -)
符号链接复制后失效
使用-a或-P保留链接;避免使用-L跟随链接
磁盘空间不足
使用df -h检查;考虑压缩或移动到其他分区

温馨提示: cp是高风险操作,建议遵循以下原则:1)批量操作前使用-i确认或先用ls预览;2)备份重要文件使用-b自动创建备份;3)复制配置文件时使用-p或-a保留权限和时间戳;4)镜像目录时使用-a保留所有属性;5)使用-u避免覆盖较新的文件。在脚本中使用cp时,建议使用-n防止意外覆盖,或使用-u进行增量复制。对于大文件或大量小文件的复制,考虑使用rsync替代cp,它支持断点续传和增量同步。

本文PDF格式下载:

  关注公众号(haopython),请回复: LLTCP

最新文章

随机文章