-exec rm 与 xargs rm -rf 深度剖析

举报
liuzhen007 发表于 2021/12/19 19:43:08 2021/12/19
【摘要】 ​目录前言正文相同点不同点-exec rmxargs rm -rf前言我们在 linux 机器上删除搜索到的文件和目录时,总会遇到这样的抉择:对于 -exec rm -rf 和 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 命令的其他用法,打印文件名字符串,具体效果如下图所示:



作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!😄


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。