学会使用 Xargs
简介
我们都知道 shell 使用管道将一个程序的标准输出传进另一个程序的标准输入, 据此我们可以像搭积木一样把程序拼起来.
但是还是有很多程序不接受标准输入里的数据,比如 echo
,
如果运行:
cat "文件路径" | echo |
最后什么也不会得到.
千万不要以为这样的命令很少,几个常用的命令 rm
,
ls
, mkdir
,
cp
都不会搭理标准输入的东西.
哪怕是那些愿意从标准输入流读取数据的程序, 它们愿意读的内容和你想要传入的内容也不一定相同。比如说命令选项和取值, 有任何一个命令能同情达理到读这些吗?
针对以上种种问题,xargs
应运而生。它的工作很简单:
把标准输入的内容按照要求划分成一个或多个命令的参数,
拼接到给定的命令后面,假装执行的是拼接后的命令.
cat "文件路径" | xargs echo |
就会看到输出了.
其实连 echo
都可以不要,xargs 默认执行.
性质
上面已经演示了 xargs
的基本使用方法了.
注意 xargs
会将标准输入里的内容用单引号括起来传进去,
因此不要指望进行各种替换.
默认情况下,xargs
用空白字符把输入分割成多个参数.
选项
- -d 分割符:使用其它 分割符.
- -p: 打印将要执行的命令并请用户确认是否继续执行.
- -t: 打印并执行命令.
- -0: 使用 null 当分割符.
- -L 行数:指定多少行作为一个命令的参数, 每个命令的参数都会单独执行一遍命令.
- -n 项数:指定一行多少项作为一个命令的参数.
- -I 替换字符串:在要执行的命令中把 替换字符串 替换成参数.
自动使用 -L 1 选项 例:
args -I 参数 sh -c 'echo 参数; mkdir 参数'
会把后面的两个 参数 替换成标准输入 中的参数. - --max-procs 进程数:如果命令不止执行一遍,指定开多少个进程执行, 0 代表不限制.
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment
GitalkValine