神奇的xargs
把这个列在第一是因为这个是我工作中学到的第一个让我赞叹的命令,我至今仍记得当时别人给我演示时的样子。
痛点:
找到了一堆文件,我该怎么把他批量依次处理一把?
应用场景:
想象有一天,老大让你把目录下所有文件名带“aaa”的文件都找出来,你心想这tm还不简单。
ls |grep aaa
搞定,交差。老板又说了,嗯,这些文件里都少了一行公司名称,你给都加到后面吧。你心里一万头羊驼呼啸而过:能一次说完不?再一看,WTF:这一千多个文件,我要改到哪天去?
(xargs: 轮到我出场了....)
使用方法:
ls |grep aaa |xargs -i cat "伟大有限公司" >> {}
收工。第二天跟老板磨叽下:老板,昨晚我加班到晚上两点,一口气把这些文件改完了。老板向你投来赞许的目光....
使用说明:
xargs -i 把管道前面命令的结果依次传给后面命令(放进 {}内)作为参数
比如:
ls |grep aaa
结果如下:
aaa.txt aaabb.txt ccaaadd.txt
那么上述命令执行的是,取出这个结果暂存,然后依次执行
cat "伟大有限公司" >> aaa.txt
cat "伟大有限公司" >> aaabb.txt
cat "伟大有限公司" >> ccaaadd.txt
完美解决问题!for循环当然也可以解决,代码行数多了不是?
另外一个重要用法是:大批量处理文件系统可能会不给你面子。比如有10w个文件让你删,你顺手一写:
rm aaa*
然后你就会发现系统毫不留情的给你一句提示: arguments too long...直接撂挑子了。
此时,依然可以用这个:
ls |grep aaa |xargs -i rm {}
然后,就慢慢等吧....
to be continued.
网友评论