学习环境:Ubuntu 16.04.2 LTS 64位

cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。

 

-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。

 

Example 1: 把某个文件夹下面的文件复制到另外一文件夹。

在这里,把目录/home/alpha/Documents/Otest里面的两个文件“Plum Rain Season1” 和 “Plum Rain Season1”复制到/home/alpha/Documents/Dtest

centos存储dd拷贝速度慢 linux cp显示拷贝速度_复制文件

在复制时候会出现以下错误信息

centos存储dd拷贝速度慢 linux cp显示拷贝速度_centos存储dd拷贝速度慢_02

由于文件称含有格,所以复制的时候可以在空格见面加上转义符号"\",或者用两个英文的双括号把含有空格的整个文件名括起来,下面分别采用这两个方式复制文件1和文件2.

centos存储dd拷贝速度慢 linux cp显示拷贝速度_centos存储dd拷贝速度慢_03

终端没有报错,再去Dtest这个目录查看,返现这两个文件都被复制到Dtest这个目录了。

centos存储dd拷贝速度慢 linux cp显示拷贝速度_复制文件_04

 

Example2:把文件夹及复制到一个不存在的目标文件夹。

Otest这个文件夹里面有一个子文件夹OSub,把他复制到Dtest/DDtest,然而DDtest这个文件夹并不存在。

这些一下命令会报错,因为cp命令只有复制功能,并无创建目录的功能,我们需要用到cp命令的-a或者-r参数。

cp /home/alpha/Documents/Otest/OSub /home/alpha/Documents/Dtest/DDtest

centos存储dd拷贝速度慢 linux cp显示拷贝速度_复制文件_05

 

执行以下命令,会在Dtest这个目录下面创建一个新的目录DDtest“, 并且源目录OSub下面的文件以及子目录和子目录里面的一切都会被复制到DDtest里面。

cp -a /home/alpha/Documents/Otest/OSub /home/alpha/Documents/Dtest/DDtest

centos存储dd拷贝速度慢 linux cp显示拷贝速度_centos存储dd拷贝速度慢_06

 

 这时,如果我们再次执行以上命令,则会吧Osub目录本身已经Osub目录下面的一些都复制到DDtest。因为当我们再次这个命令时,DDtest这个目录已经存在的,这个命令的本意就是把源目录复制到目标目录。

centos存储dd拷贝速度慢 linux cp显示拷贝速度_centos存储dd拷贝速度慢_07

对比上面两个截图,不难发现,再次执行相同cp命令时,OSub这个目录本身被复制到了第一次复制时创建的DDtest这个目录。

 

 Example 3: 把目录下面的文件复制到指定目录。

在这里,有一个名为Old的目录里面有两个文件

centos存储dd拷贝速度慢 linux cp显示拷贝速度_centos存储dd拷贝速度慢_08

名为New的目录下面什么也没有

centos存储dd拷贝速度慢 linux cp显示拷贝速度_复制文件_09

执行以下命令会把Old目录的两个文件放在New这个目录里。

注意:是Old/* 不是Old/.* 也不是Old*

cp -a /home/alpha/Documents/Old/* /home/alpha/Documents/New

 

执行以下命令,Old目录里面的文件Old1会把New目录里面的同名文件替换掉而不会有任何提示。

cp /home/alpha/Documents/Old/Old1 /home/alpha/Documents/New/Old1

 

cp -i 

执行cp -i,在覆盖同名文件前会提示是否要覆盖。

alpha@alpha-virtual-machine:~$ cp -i /home/alpha/Documents/Old/Old1 /home/alpha/Documents/New/Old1
cp: overwrite '/home/alpha/Documents/New/Old1'? y
alpha@alpha-virtual-machine:~$ cp -i /home/alpha/Documents/Old/Old1 /home/alpha/Documents/New/Old1
cp: overwrite '/home/alpha/Documents/New

 

Example 4: 复制并改名字

以下命令会把old1这个文件复制到New这个目录下面,并且改名为"imfromoldfolder".

cp  /home/alpha/Documents/Old/Old1 /home/alpha/Documents/New/imfromoldfolder