xargs的作用
xargs命令从stdin处读取一系列参数,然后使用这些参数来执行指定命令。它能将单行或多行输入文本转换成其他格式,例如单行变多行或是多行变单行。
xargs的工作原理
xargs命令接受来自stdin的输入,将数据解析成单个元素,然后调用指定命令并将这些元素作为该命令的参数。xargs默认使用空白字符分割输入并执行/bin/echo。
xargs的常见用法
1、将多行输入转换成单行输出
xargs默认的echo命令可以用来将多行输入转换成单行输出。
[root@vmax0105 test_shell]# cat file.txt 1 2 3 4 5 6 7 8 9 10 11 12 [root@vmax0105 test_shell]# cat file.txt | xargs 1 2 3 4 5 6 7 8 9 10 11 12
2、将单行输入转换成多行输出
xargs的-n选项可以将输入分割成多行,每行N个元素。
[root@vmax0105 test_shell]# cat file.txt | xargs -n 3 1 2 3 4 5 6 7 8 9 10 11 12
3、自定义分隔参数的分隔符
xargs的-d选项可以为输入数据指定自定义的分隔符
[root@vmax0105 test_shell]# echo "a;b;c" | xargs a;b;c [root@vmax0105 test_shell]# echo "a;b;c" | xargs -d ';' a b c
结合-n选项,可以将输入分割成多行,每行包含两个单词:
[root@vmax0105 test_shell]# echo "a;b;c" | xargs -d ';' -n 2 a b c
4、输出命令前询问是否执行
-p 选项:输出要执行的命令前,询问是否执行。输入y才继续执行,否则不执行。
[root@vmax0105 test_shell]# echo "a;b;c" | xargs -p -d ';' echo a b c ?...y a b c
5、输出指定字符之前的参数
-E 选项:该选项指定一个字符串,当xargs解析出多个命令行参数的时候,如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令
[root@vmax0105 test_shell]# echo "a b c" | xargs -E 'b' a
注意:-E只有在xargs不指定-d的时候有效,如果指定了-d则不起作用,而不管-d指定的是什么字符,空格也不行。
-0 选项表示以 ' ' 为分隔符,一般与find结合使用
[root@vmax0105 test_shell]# find . -name "*.txt" ./file.txt ./b.txt ./a.txt [root@vmax0105 test_shell]# find . -name "*.txt" -print0 | xargs -0 ./file.txt ./b.txt ./a.txt [root@vmax0105 test_shell]# find . -name "*.txt" -print0 | xargs -d "