xargs
xargs能接收stdin并将其转化为特定命令的命令行参数,构建单行命令的重要工具
command | xargs
指定分隔符
echo "splitXsplitXsplitXsplit" | xargs -d X
使用"X"作为分隔符分割字符串并单行输出
指定每行输出参数个数
echo "splitXsplitXsplitXsplit" | xargs -d X -n 2
使用"X"分割字符串并每行输出两个参数,每行两个参数之间使用空格隔开
读取stdin,将格式化参数传递给命令
cat dir_name.txt | xargs -I {} ls {}
将dir_name.txt的文件名称作为参数传递给ls,"{}"会被从stdin读取的参数代替,用来指定xargs参数放在后面命令中的位置(因为xargs命令默认是把参数放在后面命令的最后的),也可以使用其他特殊字符代替,例如"@"
结合find使用xargs
find . -type f -name "*.txt -print0" | xargs rm -f
删除当前目录下txt文件(包括文件名中包含空格的txt文件,因为无法判断find输出的风分隔符是"
"还是" ",而有些文件名是包含空格的,有可能误删文件名包含空格的文件)
统计源代码目录中所有C程序的行数
find source_code_dir -type f -name "*.c" -print0 | xargs -0 wc -l
结合stdin,巧妙使用whileUI局和子shell
使用xargs不能将参数传递给多个命令,但是巧妙使用子shell可以实现
cat files.txt | ( while read arg; do cat $arg; done )
等同于
cat files.txt | xargs -I {} cat {}
但是在上面第一种方法中可以在子shell(使用"()"包括起来的部分)内执行多个命令