首页/系统/Linux 运维命令速查/xargs 把输入变成命令行参数
文本处理77 条

xargs 把输入变成命令行参数

把标准输入的每行/每段变成命令参数:-n 每批数量、-I 占位替换、-P 并行、-0 配合 find -print0。

Linux 运维命令速查系统更新于 2026-10-13

xargs 是什么

xargs 把标准输入的每一段变成命令行参数,解决「管道后面接的命令不读标准输入」的问题。它按空白与换行切分输入,默认攒到一定数量才执行一次,还支持并行执行与占位符替换。切分规则既是它的能力也是它的坑:文件名里的空格会被当成参数分隔符。

基本信息

适用平台Linux、Unix 通用,GNU findutils 提供
命令语法命令 | xargs [选项] 目标命令
常用选项-n 每批参数个数 / -I 占位替换 / -P 并行度 / -0 以空字符分隔 / -r 空输入不执行 / -t 执行前打印 / -d 自定义分隔符
安全前提输入不可信或可能含空格时,必须用空字符分隔输入

典型使用场景

  • 把文件清单交给不读标准输入的命令处理
  • 批量下载:每行一个地址逐个请求
  • 批量压缩或删除,并控制每批的数量
  • 并行处理以缩短总耗时
  • 与查找命令的空字符输出配对,安全传递文件名

常用示例

常用示例
find . -name '*.log' -print0 | xargs -0 -r gzip -9
cat urls.txt | xargs -n 1 curl -sO          # 逐个下载
cat list.txt | xargs -I{} cp {} /backup/    # 占位替换
find . -name '*.tmp' -print0 | xargs -0 -P4 -n 20 rm -f
echo 'a b c' | xargs -n 1 echo              # 逐个输出

常用选项

选项作用提示
-n N每批最多 N 个参数控制单次命令的规模
-I 占位符用占位符替换位置一次只能跑一条,效率较低
-P N并行执行 N 个进程输出会交错
-0输入按空字符分隔与空字符输出配对
-r输入为空时不执行避免空输入误触发
-t执行前打印命令调试时看清实际执行的命令
-d 分隔符自定义输入分隔符处理非空白分隔的输入
不加空字符分隔时,输入里的引号会被解释,文件名带空格会被拆错;来自不可信来源的输入甚至能构造出额外命令。处理文件名一律用空字符分隔。
输入为空时,部分实现默认仍会执行一次目标命令(不带参数),加 -r 可以避免这种误触发,脚本里尤其要注意。

易错点

  • 不做空字符分隔,文件名含空格时会被拆成多个参数
  • 占位替换模式一次只执行一条命令,大批量场景比批量模式慢很多
  • 并行执行会让多个进程的输出交错,需要先合并或分别落盘
  • 未加空输入保护,命令在没有输入时仍被触发一次
  • 上游产生的内容带引号或转义字符,被当作语法解释而不是字面量

数据来源与参考

  • man 1 xargs(GNU findutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌