cp复制文件或目录

1、命令格式

cp[OPTION]... SOURCE... DIRECTORY

2、命令说明

cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有些不同。 

将源文件复制到目标文件,源文件可以有多个,目标文件只能有一个

3、命令参数

-a:等于-dR选项一起用,保持所有属性

-b:当目标文件存在时则备份目标文件,然后把新文件复制过去

-d:当源为链接文件时,复制链接文件本身而非指向的源文件

-p:复制文件或目录的时候保持文件的元数据信息,时间戳,属主,属组

-f:强制复制,如果文件存在则强制覆盖不询问管理员(不好用)

-i:如果文件存在,则询问管理员是否覆盖

-L:复制链接文件时,总是复制链接文件的源文件

-r|-R:复制目录及目录中的内容

-n:复制文件时不会覆盖现有文件

-t:用于源文件有多个的情况下,此时目标文件在前,源文件或目录在后

-u:复制文件时如果目标文件比源文件新,则不复制

 -v,--verbose:显示详细信息

 --help:帮助

 --version:显示命令版本

4、常用实例

1、复制单个文件到目标目录中,目标目录文件不存在

命令:cp login /bak

[root@server~]# lltotal 48-rw-------.1 root root  1442 Dec  7 21:28 anaconda-ks.cfg-rw-r--r--.1 root root   322 Dec 11 21:45 ifuser.sh-rw-r--r--.1 root root 27312 Dec  7 21:28install.log-rw-r--r--.1 root root  7572 Dec  7 21:27 install.log.sysloglrwxrwxrwx.1 root root    14 Dec 11 21:21 login-> /sh/iflogin.sh-rw-------.1 root root     0 Dec  9 20:39 yum.log[root@server~]# ll /bak/[root@server~]# cp ifuser.sh /bak/[root@server~]# ll /bak/total 4-rw-r--r--.1 root root  322 Dec 11 21:46 ifuser.sh[root@server~]#

提示:在没带-p参数时时间是不一样的,在带-p参数后时间是一样的,并且属主属组也一样,-a参数是在-p参数的基础上在加上-d的功能,-d是复制链接文件时,复制链接文件并非原文件。

2:复制文件存在时,询问是否覆盖

[root@server~]# ll /bak/total 20-rw-r--r--.1 root root 1926 Nov 27  2013CentOS-Base.repo-rw-r--r--.1 root root  638 Nov 27  2013 CentOS-Debuginfo.repo-rw-r--r--.1 root root  630 Dec  8 20:43 CentOS-Media.repo-rw-r--r--.1 root root 3664 Nov 27  2013 CentOS-Vault.repo-rw-r--r--.1 root root  322 Dec 11 21:46 ifuser.sh[root@server~]# cp ifuser.sh /bak/cp:overwrite `/bak/ifuser.sh'? y[root@server~]# cp -f ifuser.sh /bak/cp:overwrite `/bak/ifuser.sh'? y[root@server~]#

说明:目标文件存在时,会询问是否覆盖。这是因为cpcp -i的别名。目标文件存在时,即使加了-f标志,也还会询问是否覆盖。

3:复制整个目录

命令:cp -r /bak ./

[root@server~]# lsanaconda-ks.cfg  ifuser.sh install.log install.log.syslog  login  yum.log[root@server~]# cp -r /bak/ ./[root@server~]# lsanaconda-ks.cfg  bak ifuser.sh  install.log  install.log.syslog  login yum.log[root@server~]# cd bak/[root@serverbak]# lsCentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo  CentOS-Vault.repo  ifuser.sh[root@serverbak]#

提示:./表示当前目录,复制目录时,如果目标目录不存在则创建,如果目标目录存在则把原文件复制到目标目录中

4:复制链接文件

命令:cp -d login /bak/

[root@server~]# ll /bak/total 16-rw-r--r--.1 root root 1926 Nov 27  2013CentOS-Base.repo-rw-r--r--.1 root root  638 Nov 27  2013 CentOS-Debuginfo.repo-rw-r--r--.1 root root  630 Dec  8 20:43 CentOS-Media.repo-rw-r--r--.1 root root 3664 Nov 27  2013CentOS-Vault.repo[root@server~]# ll total 48-rw-------.1 root root  1442 Dec  7 21:28 anaconda-ks.cfg-rw-r--r--.1 root root   322 Dec 11 21:45 ifuser.sh-rw-r--r--.1 root root 27312 Dec  7 21:28install.log-rw-r--r--.1 root root  7572 Dec  7 21:27 install.log.sysloglrwxrwxrwx.1 root root    14 Dec 11 21:21 login-> /sh/iflogin.sh-rw-------.1 root root     0 Dec  9 20:39 yum.log[root@server~]# cp -d login /bak/[root@server~]# ll /bak/total 16-rw-r--r--.1 root root 1926 Nov 27  2013CentOS-Base.repo-rw-r--r--.1 root root  638 Nov 27  2013 CentOS-Debuginfo.repo-rw-r--r--.1 root root  630 Dec  8 20:43 CentOS-Media.repo-rw-r--r--.1 root root 3664 Nov 27  2013CentOS-Vault.repolrwxrwxrwx.1 root root   14 Dec 11 22:04 login ->/sh/iflogin.sh[root@server~]#

说明:复制链接文件时-d是只复制链接文件,不复制链接文件的原文件