/ 中存储网

Linux cp命令复制文件、文件夹、强制覆盖的参数及方法详解

2021-11-10 17:16:03 来源:中存储网

1、cp的常见应用场景及命令格式

cp命令是Linux最常用命令之一,可以实现单个文件/文件夹复制,多个文件/文件夹复制,创建软硬链接等。

一、复制一个源文件到目标文件(夹)。

命令格式为:cp 源文件 目标文件(夹)

这个是使用频率最多的命令,负责把一个源文件复制到目标文件(夹)下。如下图所示,复制到文件夹下,则文件名保持不变,复制到文件中,则文件名变更。如果目标文件已经存在或目标文件夹中含有同名文件,则复制之后目标文件或目标文件夹中的同名文件会被覆盖。

 

cp命令复制一个文件

二、同时复制多个文件到目标文件(夹)下。

命令格式为:cp 源文件1 源文件2 目标文件夹 或 cp 文件* 目标文件夹

这个命令使用频率也很高。第一种命令格式可以把列出来的多个文件一次性复制到目标文件夹下,每个文件直接用空格分隔;第二种命令格式使用了通配符*,如下图所示,可以将所有以“.txt”结尾的文件都复制到文件夹testDir下。

 

cp命令复制多个文件

 

cp命令复制多个文件

三、复制源文件夹到目标文件夹下。

命令格式为:cp -r 源文件夹 目标文件夹

这个也是使用频率很高的命令,只需要记住复制文件夹一定要加“-r”参数,否则会出现“cp: omitting directory”错误。

 

cp命令复制文件夹

四、只有源文件较目标文件新时复制。

命令格式为:cp -u 源文件 目标文件

这个命令很实用,尤其是在更新文件时。如下图所示,只有源文件比目标文件新时,才会将源文件复制给目标文件,否则,及时执行了命令,也不会执行复制。

 

cp命令只文件较新时复制

五、创建文件的软链接。

命令格式为:cp -s 源文件 目标文件

也可以用ln命令实现同样的功能。当一个文件路径太深(如下述的a/b/c/d/e/orginalFile.txt),访问起来十分不方便时,就会创建这个文件的软链接,使之访问起来更方便些。软链接就相当于windows上的快捷方式。

 

cp命令创建软链接

六、创建文件的硬链接。

命令格式为:cp -l 源文件 目标文件

也可以用ln命令实现同样的功能。有时候,为了某种原因,需要创建一个硬链接,如下图所示。

 

cp命令创建硬链接

这里简单介绍下硬链接和软链接的区别。如下图所示,软连接文件(softLink.txt)和被链接文件(orginalFile.txt)所拥有的inode不相同(133827和139819),硬链接文件(hardLink.txt)和被链接的文件(orginalFile22.txt)拥有相同的inode(156981)。当被链接的文件删除时,软链接文件也无法访问了,而硬链接文件仍能正常访问。

2、cp命令强制覆盖原有文件/文件夹

如果直接使用cp,不加参数,那么一旦目标和源文件夹下有同名文件,会提示是否覆盖,需要一个一个确认,如果文件数量少还好,若是多的话,一一确认会累死的...

比如:把a目录下的文件复制到b目录

cp  –r  a/*  b

执行上面的命令时,b存在的每个文件都会提示是否覆盖:

该操作当时不停提示覆盖,要手工确认,数量太多,最后只得CTR+C取消

怎么办呢?可以加一个-f,实现cp命令强制覆盖,不再提示

命令格式:cp –r –f a/*  b/

执行上面的命令时,b存在的每个文件都不再会提示,妥啦!

3、cp命令加上-f还是提示覆盖的问题

有时加了-f了,还是会有覆盖确认提示,为啥呢?原因是有一些服务器默认安装的系统里,已经增加了别名 alias cp=’cp -i’,当你执行cp时,其实执行的是cp –i。

可以通过执行alias命令查看:

看到了吗

这种情况下,先unalias cp,具体方法三种:

第一种方法:

#vi ~/.bashrc,在alias cp=’cp -i’前加上”#”注释掉这行,:wq! 保存退出,然后重新登陆,使用cp -r -f就可以了,如下图:

第二种方法:

1) 临时取消cp的alias

先执行#unalias cp,然后执行cp –r –f a/*  b/即不再出现覆盖提示了。但是下次登录还会同样情况,需要#unalias cp再次临时取消cp的alias。

以上基本就是cp命令常用场景了,而这个cp加了-f还提示覆盖的问题是很多人经常遇到的,个人推荐第二种方法,简单粗暴哦。

部分内容及图片参考来源:https://blog.csdn.net/qq_36306340/article/details/82425754