写点什么

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

作者:liuzhen007
  • 2021 年 12 月 19 日
  • 本文字数:1046 字

    阅读完需:约 3 分钟

-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 命令的其他用法,打印文件名字符串,具体效果如下图所示:




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


发布于: 2 小时前阅读数: 8
用户头像

liuzhen007

关注

敲代码,搞开发。 2021.05.01 加入

本人深耕音视频技术,走全栈路线,前后端通吃,兼顾各端与流媒体服务器。 博客主页地址:https://liuzhen.blog.csdn.net 微信公众号:玩转音视频 欢迎交流学习!

评论

发布
暂无评论
-exec rm 与 xargs rm -rf 深度剖析