cp 命令详解

| 选择喜欢的代码风格  

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

cp 命令安装:


-bash: cp: command not found

#Debian
apt-get install coreutils

#Ubuntu
apt-get install coreutils

#Alpine
apk add coreutils

#Arch Linux
pacman -S coreutils

#Kali Linux
apt-get install coreutils

#CentOS
yum install coreutils

#Fedora
dnf install coreutils

#OS X
brew install coreutils

#Raspbian
apt-get install coreutils

#Docker
docker run cmd.cat/cp cp

cp 命令补充说明:


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

cp 命令语法:


cp [option]... [-T] source destination
cp [option]... source... directory
cp [option]... -t directory source...
cp --help
cp --version

cp 命令选项:


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

cp 命令参数:


源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。

cp 命令实例


下面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。这样,只拷贝新的文件到我的存储设备上,我就使用 cp 的“更新”和“详细”选项。

通常来说,参数 -r 也可用更详细的风格 --recursive。但是以简短的方式,也可以这么连用 -ruv

$ cp --force --backup=numbered test1.py test1.py
$ ls
test1.py test1.py.~1~ test1.py.~2~

cp 命令交互式地将目录 /usr/men 中的以 m 打头的所有.c 文件复制到目录 /usr/zh 中。

$cp -i /usr/men m*.c /usr/zh

我们在 Linux 下使用 cp 命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按 Y 来确定执行覆盖。文件数量不多还好,但是要是几百个估计按 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、传递了目录属性、没有略过目录。

cp 命令递归强制复制目录到指定目录中覆盖已存在文件。

$cp -rfb ./* ../backup

# 将当前目录下所有文件,复制到当前目录的兄弟目录 backup 文件夹中

cp 命令拷贝目录下的隐藏文件如 .babelrc

$cp -r aaa/.* ./bbb
# 将 aaa 目录下的,所有`.`开头的文件,复制到 bbb 目录中。

$cp -a aaa ./bbb/ 
# 记住后面目录最好的'/' 带上 `-a` 参数

cp 命令的坑:


To create symbolic links in another directory, cp needs you to specify the full pathname, including the full directory name, in your source file name(s). Relative paths will not work -- 要在另一个目录中创建符号链接,cp需要您在源文件名中指定完整路径名,包括完整目录名。 相对路径不起作用。

cp 命令扩展阅读:




cp 命令评论