xargs命令的使用过程中一个小领悟:管道与xargs的差别
对xargs的使用总是比较模糊,大概的理解为:通道中,上一个命令的标准输出逐行作为下一个命令的参数
例如 find /var/temp* | xargs rm -r
功效:找出/var/中所有temp开头的文件和文件夹,再用rm逐行删除
(因为rm不支持管道,因此只能用xargs使find的结果逐行作为rm的参数)
假设:
<span style="font-size:18px;">$ find /var/temp* $ /var/temp1 /var/temp2</span>此时,再用xargs rm -r 等效于
<span style="font-size:18px;">$ rm -r /var/temp1 rm -r /var/temp2</span>
============================分割===================================
那么,管道与xargs有什么差别呢?这是我在使用linux过程中的一个例子。
(find与grep都是支持管道的命令)
<span style="font-size:18px;">#找出/usr/shar/doc中bash-开头的所有文件,结果如下(展开说明前的环境铺垫) [GMPY@14:44 ~]$find /usr/share/doc/bash-* -type f /usr/share/doc/bash-completion/AUTHORS /usr/share/doc/bash-completion/CHANGES.package.old /usr/share/doc/bash-completion/bash_completion.txt /usr/share/doc/bash-completion/README /usr/share/doc/bash-completion/CHANGES [GMPY@14:45 ~]$ </span>
大家再对比下下面有xargs与无xargs的结果差别
有xargs时的过滤:
<span style="font-size:18px;">[GMPY@14:49 ~]$find /usr/share/doc/bash-* -type f| xargs grep -Ew "README" /usr/share/doc/bash-completion/bash_completion.txt: also README. /usr/share/doc/bash-completion/CHANGES: * Fix bash_completion paths in README (Debian: #647941) /usr/share/doc/bash-completion/CHANGES: * README updated: explain how to use bash-completion correctly. [GMPY@14:49 ~]$</span>
无xargs时的过滤:
</pre><pre name="code" class="cpp">
<span style="font-size:18px;">[GMPY@14:49 ~]$find /usr/share/doc/bash-* -type f| grep -Ew "README" /usr/share/doc/bash-completion/README [GMPY@14:53 ~]$ </span>结果是不同的,为什么呢?
1、无xargs时是使用管道(虽然严格来说有xargs也是管道,这里为了区分暂时这么称呼),即把find命令的标准输出作为grep的检索内容,等效于:find的结果作为一个“字符串”被grep检索
<span style="font-size:18px;">$ grep -Ew "README" </span>
<span style="font-size:18px;">"/usr/share/doc/bash-completion/AUTHORS /usr/share/doc/bash-completion/CHANGES.package.old /usr/share/doc/bash-completion/bash_completion.txt /usr/share/doc/bash-completion/README /usr/share/doc/bash-completion/CHANGES"</span>2、有xargs时,则等效于检索find命令找到的每一个文件
<span style="font-size:18px;">$ grep -Ew "README" /usr/share/doc/bash-completion/AUTHORS $ grep -Ew "README" /usr/share/doc/bash-completion/CHANGES.package.old $ grep -Ew "README" /usr/share/doc/bash-completion/bash_completion.txt $ grep -Ew "README" /usr/share/doc/bash-completion/README $ grep -Ew "README" /usr/share/doc/bash-completion/CHANGES</span>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?