cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。

全称

cp: copy

格式

1
2
3
4
5
$ cp [options]... [-T] source dest

$ cp [options] source... dest

$ cp [options]... -t directory source...

常用选项

-b : 若目标文件已经存在,则覆盖前先备份。

-f : 如果目标文件已经存在,不询问而直接覆盖。

-i : 如果目标文件已经存在,询问是否覆盖。

-l : 对原文件建立硬链接,而非复制文件。

-p : 保留源文件或目录的属性,包括所有者、所属组、权限与时间。

-R,-r : 递归复制目录和目录内的所有文档。

-u : 如果目标文件已经存在,且源文件比目标文件新时才会覆盖。

-n : 不覆盖已经存在的文件。

-S : 指定备份文件的结尾标志。

-t : 指定文件复制目标目录,一般用于一次性复制多个文件时。

-v : 输出复制过程信息。

–help : 显示帮助信息。

示例

复制文件:

  • 生成文件副本
1
$ cp file1.log file1.log.bak

复制文件

  • 复制文件时保留源文件属性
1
2
3
$ cp dir1/file1.log dir2

$ cp -p dir1/file2.log dir2

复制文件时保留属性

*注意:*没有指定选项-p时复制过去的文件file1.log和源文件的时间是不同的,而添加了参数-p后复制过去的文件file2.log的时间和源文件是一样的。

  • 目标文件存在时,复制过程中进行交互操作
1
2
3
$ cp dir1/file1.log dir2

$ cp -i dir1/file2.log dir2

复制已存在文件

*注意:*当目标目录下存在同名文件时,cp命令默认会直接将已存在的文件覆盖掉。如果指定选项-i,则会给出交互提示信息,然后输入y将覆盖目标文件,n将放弃覆盖操作。

  • 一次复制多个文件
1
2
3
$ cp dir1/file1.log dir1/file2.log dir2

$ cp -t dir2 dir1/file3.log dir1/file4.log

复制多个文件

*注意:*一次拷贝多个文件有两种实现方式。一种是最后一个参数给出目标目录,前边的参数依次给出需要复制的文件。第二种方式是使用选项-t来指定目标目录,后边依次给出需要复制的文件。

  • 复制文件时,如果目标文件存在,则先进行备份。
1
2
3
$ cp -b dir1/file1.log dir2

$ cp -b -S _bak dir1/file2.log dir2

复制已存在文件时先备份文件

*注意:*选项-b会在覆盖目标文件前进行备份。默认的备份文件围尾标为~,可以通过选项-S进行指定。

复制目录

1
$ cp -r dir1 dir2

复制目录

*注意:*复制目录时必须指定选项-r,要不然会提示错误cp: omitting directory 'dir1'。在上述示例中,当目标目录dir2不存在时,执行cp命令会生成一个新的dir2目录,但是当再次执行相同目录时,则会在dir2目录中生成一个新的dir1子目录。