发现xargs命令就是一个神秘的宝藏,未使用时不以为然,使用后后悔为社么没有早点使用。简单而言,xargs命令是一个给其他命令传递参数的过滤器,在管道使用中,它可以将左侧命令的标准输出转换为标准输入,提供给右侧命令作为参数。在linux命令中,有些命令如grep可以接受标准输出,而有些如echo则不能,因而xargs就派上了用场。因此,xargs的默认命令是echo(可省略),默认的分隔符是空格(-d选项可以界定新的分隔符)。
替换工具格式化文本
例如,定义一个文件test.txt包含多行文本如下:
cat test.txt
a b c d e f
h i j k
o p q r s t
转换为单行输出
cat test.txt | xargs
a b c d e f h i j k o p q r s t
利用-n选项进行选择性多行输出
cat test.txt | xargs -n4
a b c d
e f h i
j k o p
q r s t
将标准输入转换为命令行参数
在管道命令传递中,将左侧输出转换为下级命令参数
echo "i like it" | xargs
i like it
xargs的选项-I可以指定一个替换字符串,使用替换字符串时,每行参数可以被执行一次。假设有三行文件如下:
cat test.txt
sample1.fastq.gz
sample2.fastq.gz
sample3.fastq.gz
当使用-I选项时可生成批处理文件
cat test.txt | xargs -I [] echo 'fastqc []'
fastqc sample1.fastq.gz
fastqc sample2.fastq.gz
fastqc sample3.fastq.gz
与find的结合使用
find命令有个特别参数-print0,指定输出列表以null分隔。xargs的-0选项表示用null作为分隔符。因此两者的结合可以查找当前文件夹所有的某一类文件并删除它们,包括处理包含空格的文件名也不会报错。
find . -type f -name "*.txt" -print0 | xargs -0 rm -f
还可以整合起来搜索一类文件
$ xargs find -name
"*.txt"
./foo.txt
./hello.txt
相关内容推荐