cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。
如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有些不同。
语法
cp(选项)(参数)
选项说明
-a, --archive 等于-dR --preserve=all
--backup[=CONTROL 为每个已存在的目标文件创建备份
-b:类似--backup 但不接受参数
--copy-contents:在递归处理是复制特殊文件内容
-d:等于--no-dereference --preserve=links
-f:--force 如果目标文件无法打开则将其移除并重试(当 -n 选项存在时则不需再选此项)
-i:--interactive 覆盖前询问(使前面的 -n 选项失效)
-H:跟随源文件中的命令行符号链接
-l:--link链接文件而不复制
-L:--dereference 总是跟随符号链接
-n:--no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P:--no-dereference 不跟随源文件中的符号链接
-p:等于--preserve=模式,所有权,时间戳
--preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果可能保持附加属性:环境、链接、xattr 等
-R/-r: --recursive 复制目录及目录内的所有项目
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
参数说明
源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。通常会用到点.(当前目录)或点点..(上级目录)的形式。
常用示例
1、复制到当前目录
cp ../mary/homework/assign .
2、只有源文件较目的文件的修改时间新时,才复制文件
cp -u -v file1 file2
3、将文件file1复制成文件file2
cp file1 file2
4、交互式复制
cp -i file1 file2
5、强制式复制
cp -f file1 file2
6、将目录dir1复制成目录dir2
cp -R dir1 dir2
7、多文件、目录同时复制(file1、file2、file3、dir1>>>dir2)
cp -R file1 file2 file3 dir1 dir2
8、复制时保留文件属性
cp -p a.txt tmp/
9、复制时保留文件的目录结构
cp -P /var/tmp/a.txt ./temp/
10、复制时产生备份文件
cp -b a.txt tmp/
11、复制时产生备份文件,尾标 ~1~格式
cp -b -V t a.txt /tmp
12、指定备份文件尾标
cp -b -S _bak a.txt /tmp
13、复制所有以m打头的.c文件
cp -i /usr/men m*.c /usr/zh
14、cp命令复制文件时候需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。
cp aaa/* /bbb
复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。
cp -r aaa/* /bbb
这次依然需要按Y来确认操作,但是没有忽略子目录。
cp -r -a aaa/* /bbb
依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。
\cp -r -a aaa/* /bbb
成功,没有提示按Y、传递了目录属性、没有略过目录。