对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>

xargs命令的使用过程中一个小领悟:管道与xargs的差别的更多相关文章

  1. ESXi与物理交换机静态链路聚合配置过程中的小陷阱

    作者:陆斌文章来自微信公众号:平台人生 内容简介:ESXi与物理交换机之间配置静态链路聚合时,因为静态链路聚合的特点,在进行down网卡和从虚拟交换机移除网卡的操作时,可能会无法完成故障流量切换,影响 ...

  2. 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)

    关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)   作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...

  3. 利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)

    利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)   作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $(" ...

  4. html/css 盒子布局 Margin 、Padding 、border 以及 清除浮动的知识 (学习HTML过程中的小记录)

    html/css  盒子布局 Margin .Padding .border 以及 清除浮动的知识 (学习HTML过程中的小记录) 作者:王可利(Star·星星) width     是"宽 ...

  5. 关于 JavaScript 中一个小细节问题 (在控制台中直接 {Name:'王尼玛',Age:20} 对象报错问题)

    在 Chrome 浏览器,大家可能遇到这样一个小问题. 随便输入一个 Object 对象  ,比如 {Name:'王尼玛',Age:20} ,将会报错.之前,也从来没去考虑过到底是为啥原因. 今天,刚 ...

  6. dubbo debug过程中一个有趣的问题

    最近在debug dubbo代码过程中遇到的很有趣的问题 我们都知道dubbo ReferenceBean是消费者的spring bean包装,为了查一个consumer端的问题,在Reference ...

  7. 继《关于讯飞语音SDK开发学习》之打包过程中遇到小问题

    关于讯飞语音SDK开发学习 使用vs自带打包,具体怎么操作就不说了,网上关于这方面的资料挺多的.例如:winform 打包部署,VS2010程序打包操作(超详细的),关键是桌面上创建快捷方式中的&qu ...

  8. stm8 停机模式与外部中断唤醒中一个小问题

    做了一个简单的项目,电路板使用电池供电,需要系统在待机时低功耗.而对外接口只有4个按键,也就是唤醒必须要通过这四个按键. 系统功能就不介绍了,只给出进入低功耗的代码和退出低功耗的代码. 使用芯片为st ...

  9. 第三方开源动画库EasyAnimation中一个小bug的修复

    看过iOS动画之旅的都知道,其中在最后提到一个作者写的开源动画库EasyAnimation(以下简称EA). EA对CoreAnimation中的view和layer动画做了更高层次的包装和抽象,使得 ...

随机推荐

  1. springMVC+mybatis事务管理总结

    1.spring,mybatis事务管理配置与@Transactional注解使用: 概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framewo ...

  2. Jmeter(一)工具的简单介绍(z)

    一.JMeter介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件,J ...

  3. Entity Framework: 主从表的增删改

    1.根据主表添加从表数据 var dest = (from d in context.Destinations where d.Name == "Bali" select d).S ...

  4. python数据处理——numpy

    标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针.这样为了保存一个简单的[1,2,3],需要有3个指针和三个 ...

  5. swagger使用二:swagger配置多个项目注释

    在项目中采用swagger测试接口,提供接口给其他人员都非常的方便. 在swagger默认配置中,默认只显示接口访问层中的注释,可是很多的参数说明都已经在实体层中了啊?(如下图)不可能再把实体层中的模 ...

  6. Expression拼接

    public static class PBuilder { /// <summary> /// 机关函数应用True时:单个AND有效,多个AND有效:单个OR无效,多个OR无效:混应时 ...

  7. R在Centos下安装

    R语言是主要用于统计分析.绘图的语言和操作环境. 官方网站: http://www.r-project.org/ Windows下面有直接的安装包,直接下载安装很方便,但是对于刚出的CentOS6.0 ...

  8. BZOJ1396:识别子串(SAM)

    Description Input 一行,一个由小写字母组成的字符串S,长度不超过10^5 Output L行,每行一个整数,第i行的数据表示关于S的第i个元素的最短识别子串有多长. Sample I ...

  9. PHP中将字符串转化为整数(int) intval() printf()

    int <?php $foo = "1"; // $foo 是字符串类型 $bar = (int)$foo; // $bar 是整型 ?> intval <?ph ...

  10. ASP.NET SingalR + MongoDB 实现简单聊天室(三):实现用户群聊,总结完善

    前两篇已经介绍的差不多了,本篇就作为收尾. 使用hub方法初始化聊天室的基本步骤和注意事项 首先确保页面已经引用了jquery和singalR.js还有对应的hubs文件,注意,MVC框架有时会将jq ...