cp
命令可以理解为英文单词 copy 的缩写,其功能为复制文件或目录。
它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp 命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
选项 | 说明 |
---|---|
-a | 此选项的效果和同时指定 -dpr 选项相同 |
-d | 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录 |
-f | 强行复制文件或目录,不论目标文件或目录是否已存在,若目标文件已存在,则会直接覆盖原文件 |
-i | 覆盖已有文件之前先询问用户 |
-l | 对源文件建立硬连接,而非复制文件 |
-s | 对源文件建立符号连接,而非复制文件 |
-p | 保留源文件或目录的属性 |
-R/r 或 --recursive | 递归处理,将指定目录下的所有文件与子目录一并处理 |
-u | 使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件 |
-S | 在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀 |
-b | 覆盖已存在的文件前将该文件备份 |
-v | 详细显示cp命令执行的操作过程 |
例如,将当前目录下的目录 test 复制到当前目录下的目录 httpd 下:
[root@htlwk0001host ~]# cp -r test httpd
例如,将当前目录下的文件 Demo1.java 复制一份,取名为 Demo2.java:
[root@htlwk0001host ~]# cp Demo1.java Demo2.java
例如,将文件 file 复制到目录 /usr/men/tmp 下,并改名为 file1:
[root@htlwk0001host ~]# cp file /usr/men/tmp/file1
将当前目录下的文件test.txt复制到目录test1下,若已存在同名文件则备份:
[root@htlwk0001host test]# ls # 查看当前目录的内容,存在文件test.txt
Person.class person.jar Person.java td_dictionary_20210523.sql test1 test.txt tf_company_20210603.sql tf_user_20210523.sql
[root@htlwk0001host test]# ls test1 # 查看目录test1,也存在文件test.txt
test.txt
[root@htlwk0001host test]# cp test.txt -b test1/ # 将当前目录下的文件test.txt复制到目录test1下,若已存在同名文件则备份
cp:是否覆盖'test1/test.txt'? y
[root@htlwk0001host test]# ls test1 # 我们看到目录test1存在文件test.txt~,这就备份文件
test.txt test.txt~
复制 /root/lwx 目录下的所有文件到当前工作目录
[root@htlwk0001host test]# cp /root/lwx/* .
将目录 /tmp/dir1 复制到当前目录下:
[root@htlwk0001host test]# cp -a /tmp/dir1 .
将目录 dir1 复制一份,取名为 dir2:
[root@htlwk0001host test]# cp -a dir1 dir2
将目录 /usr/linuxcool 中的所有以 .c
为后缀名的文件复制到目录 dir 中:
[root@htlwk0001host test]# cp -r /usr/linuxcool/*.c dir
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:
[root@htlwk0001host test]# cp -r -a aaa/* /bbb # 成功,没有提示按Y、传递了目录属性、没有略过目录
将目录 aaa 及其子目录下的所有 .
开头的文件复制到 bbb 目录中:
[root@htlwk0001host test]# cp -r aaa/.* ./bbb
将目录 /etc/skel/
下的隐藏文件复制到 /var/mqm
目录下
[root@htlwk0001host test]# cp -a /etc/skel/. /var/mqm