数字生活

数字科技有益生活

神奇的xargs命令

发现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
所有摄影照片和视频归本站版权所有,其他内容遵循知识共享许可协议 BY-NC-SA 4.0

暂无评论