Linux xargs 命令 讲解

xargs 的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。一般和管道配合使用,也可以单独使用。

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:
```
find /sbin -perm +700 |ls -l #这个命令是错误的
find /sbin -perm +700 |xargs ls -l #这样才是正确的
```
如果path目录下文件过多就会因为“参数列表过长”而报错无法执行。
```
rm `find /path -type f`
```
但改用xargs以后,问题即获解决。
```
find /path -type f -print0 | xargs -0 rm
```
本例中xargs将find产生的长串文件列表拆散成多个子串,然后对每个子串调用rm。这样要比如下使用find命令效率高的多。
```
find /path -type f -exec rm '{}' \;
```
上面这条命令会对每个文件调用"rm"命令。当然使用新版的"find"也可以得到和"xargs"命令同样的效果:
```
find /path -type f -exec rm '{}' +
```
xargs的作用一般等同于大多数Unix shell中的反引号,但更加灵活易用,并可以正确处理输入中有空格等特殊字符的情况。对于经常产生大量输出的命令如find、locate和grep来说非常有用。
常用参数:
-i 或者是-I(大写的i) 将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
其中-I的正确用法是:
```
ls *.log | xargs -I {} mv {} {}.bak
```
而-i的用法是
```
ls *.log | xargs -i mv {} {}.backup
```
区别是:-I可以自己指定替换字符,如上面{}可换成file或其他字符```ls *.log | xargs -I file mv file file.bak```
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-p 当每次执行一个argument的时候询问一次用户。
-a file 从文件中读入作为sdtin

 


本文章内容引用自百度百科和菜鸟教程,详细了解请阅读如下链接:

https://baike.baidu.com/item/xargs/2847408?fr=aladdin
https://www.runoob.com/linux/linux-comm-xargs.html

 
posted @ 2020-09-05 10:41  小明大强  阅读(373)  评论(0编辑  收藏  举报