玩转xargs
xargs命令可以把标准输入数据转换成命令行参数。也可以将单行或多行文本输入转换成其他格式,是构建单行命令的重要组件之一。
xargs命令应该紧跟在管道操作符之后,以stdin作为主要的源数据流,使用格式:
COMMAND | xargs [OPTIONS] ...
示例一:将多行输入转换成单行输出
示例二:将单行输入转换成多行输出
-n:是每行的最大参数的个数
空格是xargs的默认输入定界符,如下示例所示:
-d DELIM:以指定字符为输入定界符
示例三:读取stdin,将格式化参数传递给命令
定义一个简单脚本test.sh:
#!/bin/bash # echo $*"#"
定义一个脚本参数列表文件args.txt:
通过xargs命令可以实现一次向脚本传递n个参数,如:
有时候,除了向脚本传递一些可变参数外,还有一些固定不变的命令参数,如何实现变化的参数和固定的参数一起传递给脚本执行呢?
例如,要实现以下效果:
./test.sh -p arg1 -d
./test.sh -p arg2 -d
./test.sh -p arg2 -d
这时候就用到-I选项了,先看效果:
-I {} 指定了替换字符串。对于每一个命令参数,字符串{}都会被从stdin读取到的参数替换掉。
示例四:与find配合使用完成相应功能
最好的实现方式是:把find的输出作为xargs的输入,就必须将-print0与find结合使用,以字符null('\0')来分隔输出。
/*示例*/ find ./ -type f -name "*.txt" -print0 | xargs -0 rm -f
xargs -0 :将\0作为输入定界符