介绍 xargs 工作原理和常见用法

工作原理

xargs 从标准输入读 stdin 中读取数据,并根据分隔符(通常是空格、制表符或换行符)切分,将切分后的部门作为参数传递给后面的命令。然后一直重复。如下步骤:

  1. 读取 stdin,检测到分隔符
  2. 构建命令,执行
  3. 等待命令执行完成,然后重复第一步

常见用法

xargs 常用于,需要把一个命令输出当作另一个命令参数传入的情况。对比 | 的数据流向如下:

  • | stdout -> stdin : 管道可以让标准输出到标准输入
  • xargs stdin -> command arguments:可以让标准输入到命令行参数
  • command1 | xargs command2 stdout -> stdin -> command arguments 组合使用可以让命令 1 的输出到命令 2 的参数

xargs 不使用任何选项时,会按照每个分隔符切割出一个部分,就执行一次命令,是一个循环执行的过程

# 删除多个文件,ls展示出所有的文件,过滤出txt格式的,然后每个文件都作为rm的参数,循环删除
ls | grep .txt | xargs rm

构建复杂的命令时候,可以使用-I选项,-I 后接占位符,每次替换时,分割出来的片段将会替换占位符构建命令

ls | grep .txt | xargs -I {} cp {} /destination/

还可以使用 -P 选项并发执行命令

cat file.txt | xargs -P 4 -I {} command {}

如何 debug 调试 xargs?

-p选项可以进入 prompt 模式,每次执行命令前将会让用户提示,这样子可以看到每次执行的命令

参考资料