描述

cp命令可以理解为英文单词copy的缩写,其功能为复制文件或目录。

cp命令可以将多个文件复制到一个具体的文件名或一个已经存在的目录下,也可以同时复制多个文件到一个指定的目录中。

语法格式

cp [参数] [文件]

  • 源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
  • 目标文件 :指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。

常用参数

参数

全称

描述

-a

–archive

此参数的效果和同时指定"-dpR"参数相同;

-b

覆盖已存在的文件目标前将目标文件备份;

-d

当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;与--no-dereference --preserve=links相同

-f

–force

强行复制文件或目录,不论目标文件或目录是否已存在;

-i

–interactive(交互)

覆盖既有文件之前先询问用户;

-l

–link

对源文件建立硬连接,而非复制文件;

-p

–preserve[=ATTR_LIST]

保留源文件或目录的属性;

-R/r

–recursive

递归处理,将指定目录下的所有文件与子目录一并处理;

-s

–symbolic-link

对源文件建立符号连接,而非复制文件;

-S

–suffix=SUFFIX

在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;

-u

使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;

-v

–verbose

详细显示命令执行的操作。

参考示例

  1. 复制目录
> cp -R dir1 dir2/
  1. 复制文件test1并改名为test2
> cp -f test1 test2
  1. 复制多个文件 (源文件是多个文件,目标文件,必须是目录)
> cp test1.sh test2.sh aaa  # 不是一个目录
cp: target 'aaa' is not a directory
# dir2是一个目录
> cp test1.sh test2.sh dir2
> ls dir2/
test1.sh  test2.sh
  1. 复制一个文件夹(默认情况不能复制目录,如需复制,需要添加-r参数)
>cp dir1/ dir3/  # 错误案例
cp: omitting directory 'dir1/'
> cp -r dir1/ dir3/
> ls -l dir3/
drwxr-xr-x 2 root root 4096 Dec  7 15:12 dir1
  1. 交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh
> cp -i /usr/men m*.c /usr/zh
  1. 我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:
# 复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,
# 需要按Y来确认并且会略过aaa目录下的子目录。
> cp aaa/* /bbb

# 这次依然需要按Y来确认操作,但是没有忽略子目录。
> cp -r aaa/* /bbb

# 依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。
> cp -r -a aaa/* /bbb

# 成功,没有提示按Y、传递了目录属性、没有略过目录。
> \cp -r -a aaa/* /bbb