ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux xargs 命令详解

2020-07-02 11:34:59  阅读:269  来源: 互联网

标签:xargs 33 echo 命令 详解 参数 命令行 linux


Linux学习: xargs 命令

xargs ,execute arguments ,从名字看它就是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具,它擅长将标准输入数据转换成命令行采纳数,在并行中非常有用。本文汇总网络的资料

1 为什么要用xargs

有的命令可以接收标注输入(stdin)。如cat。

#cat的输出可以通过管道作为grep的参数。
$ cat gene.gff | grep transcript
多数的命令是无法接收管道传递的参数。如echo,rm ,mkdir和ls

$ echo "hello world" | echo # 什么都没有输出
find /sbin -perm +700 |ls -l       #这个命令是错误的
find /sbin -perm +700 |xargs ls -l   #这样才是正确的
2 xargs和管道(|)的使用
xargs是将标准输入转为命令行参数。

$ command |xargs -options command
$ echo "hello world" | xargs echo # 通过xargs捕捉管道上的输出作为echo的参数
$ echo "one two three" | xargs mkdir # 新建3个文件
3 xarge的参数 -d
-d 表示更改分隔符。默认的xargs分隔符是回车,argument的分隔符是空格。

$ echo -e "a\tb\tc" | xargs -d "\t" echo
a b c
$echo "nameXnameXnameXname" | xargs -dX
name name name name
4 xarge的参数 -p,-t
-p参数打印出要执行的命令,询问用户是否要执行(增加安全性)

$ echo 'one two three' | xargs -p touch
touch one two three ?...
-t参数则是打印出最终要执行的命令,然后再执行,不需要用户确认。

$ echo 'one two three' | xargs -t rm
rm one two three
5 xargs -L参数
如果标准输入包含多行,-L参数指定多少行作为一个命令行参数。

$ echo -e "a\nb\nc" | xargs -L 1 echo
a
b
c
6 xargs -n 参数
如果需要同一行输入多项可以使用-n。-n加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。

$ echo {0..9} | xargs -n 2 echo
0 1
2 3
4 5
6 7
8 9
使用-n进行格式的转换

cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z
cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z
7 xargs -I 参数
如果xargs要将命令行参数传给多个命令,可以使用-I参数。如果命令后面可以跟内容,且没有目的路径的时候,可以省略-i。将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。

$ ls *.jpg | xargs -n1 -I {} cp {} /data/images
$ ls *.txt |xargs -t -i mv {} {}.bak
8 xargs的 -P --max-procs参数
xargs默认只用一个进程执行命令。如果命令要执行多次,必须等上一次执行完,才能执行下一次。
--max-procs参数指定同时用多少个进程并行执行命令。--max-procs 2表示同时最多使用两个进程,--max-procs 0表示不限制进程数。
9 xargs的-E选项
遇到就停止。该选项指定一个字符串,当xargs解析出多个命令行参数的时候,如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令。

echo '11 22 33' | xargs -E '33' echo
#可以看到正常情况下有3个命令行参数 11、22、33 由于使用了-E '33' 表示在将命令行参数 33 之前的参数传递给执行的命令,33本身不传递。等价于 echo 11 22 这里-E实际上有搜索的作用,表示只取xargs读到的命令行参数前面的某些部分给命令执行。





标签:xargs,33,echo,命令,详解,参数,命令行,linux
来源: https://www.cnblogs.com/xiaolang666/p/13223789.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有