当前位置: 首页 > 工具软件 > cp-class > 使用案例 >

Linux 命令之 cp -- 复制文件或目录

云俊美
2023-12-01

一、命令介绍

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  
 类似资料: