cp
命令用于复制文件和目录,全称是 “copy”。通过 cp
命令,可以将文件从一个位置复制到另一个位置,也可以复制整个目录结构。
基本语法
cp [选项] 源文件 目标文件
或
cp [选项] 源文件... 目标目录
源文件
:要复制的文件或目录。目标文件
:复制后文件的名称和路径。目标目录
:复制到的目标目录。
常用选项
选项 | 说明 |
---|---|
-a | 归档模式,复制文件及其所有属性(包括符号链接、权限、时间戳等)。 |
-r 或 -R | 递归复制目录及其内容。 |
-i | 如果目标文件已存在,提示用户确认是否覆盖。 |
-f | 强制复制,即使目标文件已存在也不提示,直接覆盖。 |
-u | 只在源文件比目标文件新时,或者目标文件不存在时才复制。 |
-v | 显示详细的操作过程。 |
-p | 保留文件的属性,如时间戳、模式、所有者等。 |
-n | 不覆盖已存在的文件。 |
-l | 创建硬链接而不是复制文件本身。 |
--parents | 保留源文件的路径结构。 |
--sparse=WHEN | 处理稀疏文件的方式(auto 、always 、never 3 种方式)。 |
--reflink=WHEN | 创建 CoW(写时复制)副本,支持的文件系统上可以节省空间。 |
--backup | 覆盖文件时为目标文件创建备份。 |
--remove-destination | 在复制前先移除目标文件(避免覆盖时保持目标文件的属性)。 |
常见用法
- 复制单个文件到指定位置
cp test.txt /path/dir_name
将 test.txt
复制到 /path/dir_name
目录。
- 复制并重命名文件
cp test.txt test1.txt
将 test.txt
复制为 test1.txt
。
3. 递归复制整个目录
cp -r /source/directory /destination/directory
使用 -r
选项可以递归地复制整个目录及其内容。
4. 提示确认覆盖文件
cp -i test1.txt /www/test/
如果目标目录中已经存在 test1.txt
,cp
会提示是否覆盖。
许多 Linux 发行版中,默认会为某些常用命令设置别名。cp
命令可能被设置为带有交互式选项 -i
的版本。
可通过以下命令查看:
alias cp
或
type cp
5. 保留文件属性
cp -p test.txt test2.txt
-p
选项会保留文件的时间戳、权限和其他属性。
可以通过以下命令查看带-p
和不带 -p
的区别 :
ls -l --time-style=full-iso
或
stat test.txt test2.txt
6. 只复制更新的文件
cp -u test.txt test2.txt
只有当 test.txt
比目标目录中的文件更新时,才进行复制。
7. 显示详细复制过程
cp -v test.txt test2.txt
-v
选项会显示复制的每个文件的信息。
8. 强制覆盖文件
cp -f test.txt /www/test/
-f
选项强制覆盖目标文件,不会提示确认。如果覆盖文件还提示确认,系统可能将 cp
设置为 cp -i
来防止用户误操作。
复制符号链接
- 默认情况下,
cp
复制的是符号链接指向的目标文件,不是符号链接本身,既解引用 -P
或--no-dereference
作用是防止解引用:只复制符号链接本身,不复制它指向的内容。
cp -P symlink /www/test
- 如果希望
cp
递归地复制符号链接并保持它们的链接状态,可以使用-a
选项。
`cp` 命令的常见组合
1. 归档模式复制目录及其内容
cp -a /source/directory /destination/directory
-a
是一个综合选项,相当于 -dR --preserve=all
,可以递归复制,并保留所有属性(元数据),包括符号链接。
2. 创建备份文件
cp --backup test.txt /www/
当文件需要覆盖时,--backup
会为被覆盖的文件创建备份。备份的文件通常会加上 ~
后缀。
3. 使用硬链接代替复制
cp -l test.txt /www/test/
-l
选项创建硬链接,不会实际复制文件内容。