#yyds干货盘点# -exec rm 与 xargs rm -rf 深度剖析

Posted liuzhen007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# -exec rm 与 xargs rm -rf 深度剖析相关的知识,希望对你有一定的参考价值。


目录

​前言​

​正文​

​相同点​

​不同点​

​-exec rm​

​xargs rm -rf​


前言

我们在 linux 机器上删除搜索到的文件和目录时,总会遇到这样的抉择:对于 -exec rm -rf 和 xargs rm -rf 两个命令,应该用哪个呢?而且网上很多文章简直不负责任,有的甚至把二者的区别写反了。今天这篇文章就算拨乱反正啦。

正文

相同点

二者都可以删除指定的目录或者文件,而且都是强制删除。

不同点

二者在具体的执行策略上有所不同,下面详细介绍。

-exec rm

exec 命令用来调用并执行指定的其他命令。但是,我们比较推荐在 shell 脚本程序中使用 exec 命令,调用其他的命令。因为如果在当前终端中使用该命令,则当指定的命令执行结束后会立即退出终端。(友情提示大家动手尝试时千万要注意呦

示例命令:


exec ls 


如果你想尝试 exec 命令的这个特性,可以新打开一个终端,然后复制上面的命令,看一看效果!

最后,提醒大家需要注意的是 exec 命令必须由一个 ; 结束,因为 shell 一般会对 ; 进行解析,所以借用转义字符 \\; 防止这种情况发生。另外,上面的命令不能直接执行目录和文件,完整的命令如下:


exec rm  \\;


其中, 用来接受其他命令传入的参数集合,比如搜索当前目录下所有的日志文件并删除,命令如下:


find ./ -name "*.log"  -exec rm \\;


注意:和其他命令一起使用时,前边需要加链接符 - ,但是使用时不需要。 

xargs rm -rf

xargs 命令的作用是给别的命令传递参数,一般会配合管道符 | 来使用,把前一命令的 stdout 输出作为自己的 stdin 输入,再转换成 command line 形式的参数传给其它命令。

相比较 exec 单次执行所有参数集合,xargs 命令会将最终的命令转换成单独的命令再执行,从而在一定程度上避免“参数太多”类似的错误。因此,在进行大量文件和目录删除操作时,比较推荐使用 xargs 命令。

好了,为了更加形象的对比二者在使用时的区别,现在使用 xargs 命令搜索并删除当前目录下的所有日志文件,应该使用什么命令呢,具体命令如下:


find ./ -name "*.log" | xargs rm -rf


是不是更加简单?至少个人是这么认为的,比较符合我们一般组合命令的使用习惯。 

下面简单看一下 xargs 命令的其他用法,打印文件名字符串,具体效果如下图所示:

#yyds干货盘点#

作者简介:

以上是关于#yyds干货盘点# -exec rm 与 xargs rm -rf 深度剖析的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#Centos7更换阿里YUM源

#yyds干货盘点#Centos7更换阿里YUM源

#yyds干货盘点#Linux启动流程和故障排错

#yyds干货盘点# Docker+Jenkins发布GitHub项目-配置环境

发现病毒文件,删除后又自动创建怎么办#yyds干货盘点#

#yyds干货盘点# 数据结构与算法学习