Linux cp命令使用详解
Linux cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
用法
cp [option]… [T] suorce dest
cp [option]… suorce .. DIR
cp [option]… -t DIR suorce …
| 选项 | 说明 |
|---|---|
| -a, –archive | 此参数的效果和同时指定”-dpR”参数相同; |
| –attributes-only | 仅复制文件属性 |
| –backup[=control] | 对每个已存在的目的文件创建备份 |
| -b | 同 –backup,但是不接受参数 |
| –copy-contents | 递归时复制特殊文件的内容 |
| -d | 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录; |
| -f, –force | 强行复制文件或目录,不论目标文件或目录是否已存在; |
| -i, –interactive | 覆盖既有文件之前先询问用户; |
| -H | 跟随符号链接 |
| -l, –link | 对源文件建立硬连接,而非复制文件; |
| -L, –dereference | 一直跟随符号链接 |
| -n, –no-clobber | 不覆盖已存在的文件 |
| -p | 保留源文件或目录的属性; |
| –perserve[=ATTR_LIST] | preserve the specified attributes (default: mode,ownership,timestamps), if possible additional attributes: context, links, xattr, all |
| -P, –no-dereference | 从不跟随符号链接 |
| -R/r, –recursive | 递归处理,将指定目录下的所有文件与子目录一并处理; |
| –reflink[=when] | control clone/CoW copies. See below |
| –remove-destination | remove each existing destination file before attempting to open it (contrast with –force) |
| –sparse[=when] | control creation of sparse files. See below |
| –strip-trailing-slashes | remove any trailing slashes from each SOURCE argument |
| -s, –symbolic-link | 对源文件建立符号连接,而非复制文件; |
| -S, –suffix=SUFFIX | 在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀 |
| -t, –target-direnctory=DIR | copy all SOURCE arguments into DIR |
| -T, –no-target-direnctory | treat DEST as a normal file |
| -u, –update | 使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件; |
| -v, –verbose | 显示详细信息 |
| -x, –one-file-system | stay on this file system |
| -Z | set SELinux security context of destination file to default type |
| –help | 显示帮助信息 |
| –version | 显示版本信息 |
实例
面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。这样,只拷贝新的文件到我的存储设备上,我就使用 cp 的“更新”和“详细”选项。
通常来说,参数 -r 也可用更详细的风格 --recursive。但是以简短的方式,也可以这么连用 -ruv。
1 | cp -r -u -v /usr/men/tmp ~/men/tmp |
版本备份 --backup=numbered 参数意思为“我要做个备份,而且是带编号的连续备份”。所以一个备份就是 1 号,第二个就是 2 号,等等。
1 | cp --force --backup=numbered test1.py test1.py |
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点.或点点..的形式。例如,下面的命令将指定文件复制到当前目录下:
1 | cp ../mary/homework/assign . |
所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。
将文件file复制到目录/usr/men/tmp下,并改名为file1
1 | cp file /usr/men/tmp/file1 |
将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中
1 | cp -r /usr/men /usr/zh |
交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中
1 | cp -i /usr/men m*.c /usr/zh |
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:
1 | cp aaa/* /bbb |
递归强制复制目录到指定目录中覆盖已存在文件
1 | cp -rfb ./* ../backup |
拷贝目录下的隐藏文件如 .babelrc
1 | cp -r aaa/.* ./bbb |