xargs 命令
·77 字·1 分钟
xagrs – 从标准输入获得参数并执行命令
xargs 有点类似反引号 ,但是功能更强大,它从标准输入获得参数列表,然后分割小块分段,再逐条传递给其他命令并执行。例如:
find ./ -type f | xargs grep date
该命令相当于对当前目录下的每个文件执行一次 grep date
,也就是将列出当前目录下文件内容中包含 date
的文件 。如果没有 xargs
,只会列出当前目录下文件名中包含 date
字段的文件。
但是上面这个例子存在一个问题,如果文件名中包含有空格,会出错,这是因为 xargs 默认是按照空白字符来分割输入的。一个简单的解决办法就是告诉find使用NUL(\0)来分割结果(向find提供-print0选项),并且告诉xargs也使用Nul来分隔输入(-0)。例如删除当前目录下所有的 python 文件:
find ./ -name '*.py' -type f -print0 | xargs -0 rm
如果要指定参数在命令中的文件,可以用 -i
选项和 {}
的组合,参数就会被放到 {}
所在的位置。例如,将当前目录下的文件移动到 back 目录下:
find ./ -type f | xargs -i mv {} ./back/
有的命令执行时需要不止一个参数,xargs 提供了 -n
选项指定参数数目。一个简单的例子,逐对比较当前目录下的文件的不同:
find ./ -type f | xargs -n 2 diff
还用两个有用的选项:
- -t 每次执行命令前将完整的命令打印一次
- -r 在无输入情况下则不构造命令执行