Linux文件复制命令cp
cp命令可以复制单个文件、多个文件或者目录。
命令格式
命令格式根据来源文件的个数可以分为两种:
#复制单个来源文件
cp [-adfilprsu] 来源文件(source) 目标文件(destination)
#复制多个来源文件
cp [options] source1 source2 source3 .... directory
命令选项
-a :相当于选项 -pdr 的意思;(常用)
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件档案本身;
-f :为强制(force)的意忠,若目标档案已经存在且无法开启,则移除后再尝试一
次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行;(常用)
-l :进行硬式连结(hard link)的连结档建立,而非复制档案本身;
-p :连同档案的属性一起复制过去,而非使用默认属性(备份常用),这里的属性指文件的权限、所有者、所属组、文件修改时间等等所有文件属性信息;
-r :递归持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即『快捷方式』档案;
-u :若 destination 比 source 旧才更新 destination !
-S:在备份文件时,自己指定后缀覆盖默认后缀“SUFFIX”;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
命令参数
来源文件(source): 可以为目录、单个文件、来源列表(空格分隔,列表可包含文件或者目录)。
目标文件(destination): 可以为目录、文件名。
注意:
- 当来源文件为多个时,目标文件必须是一个已经存在的目录。
- 当来源文件是目录时,必须加上选项 -r 才可以复制目录,并且该目录中所有的子目录都将会被递归复制。
- 若没有加 -p 选项,可能会由于不同身份者的执行导致目标文件的某些属性或权限被改变。
常用例子
1、复制一个文件到一个目录中
#将file这个文件复制到/home目录下
cp /home/frank/file /home
若想同时复制到目录下并且修改名字:
#复制file文件到/home目录,并且文件名改为file_20191028
#注意重新取的文件名是否为一个目录,如果是的话就复制到那个目录中去了,就达不到修改名字的目的了
cp /home/frank/file /home/file_20191028
相当于判断目标文件是目录还是文件还是不存在,若是目录就复制到该目录中,若是文件或者不存在就相当于拷贝这个文件到另一个文件中。
2、将一个目录复制到另一个目录中
#这里将frank目录复制到miasy目录下,即miasy目录下将会存在frank目录及其所有的子文件或子目录
cp -r /home/frank /home/miasy
3、将一个目录下的所有文件复制到另一个目录中,这里有两种方式但有差别。
#这种方式也可以将frank目录下的所有文件(不包括子目录) 复制到 miasy目录下
cp /home/frank/* /home/miasy
#加上了-r选项,该目录下的所有文件或目录都会被复制,-f选项为强制覆盖
cp -rf /home/frank/* /home/miasy
4、复制多个文件到另一个目录中
#将当前目录下的file1,file2, file3复制到另一目录中
cp file1 file2 file3 /home/frank
#复制多个目录到另一目录中
cp -r dir1 dir2 /home/frank
#复制多个目录和多个文件到另一目录中
cp -r dir1 dir2 file1 file2 /home/frank