xargs 的 -n 参数用于控制每次调用下游命令时最多传递 n 个参数,语法为 xargs -n n command,需置于 -i 前且不可为 0,可与 -p 并用实现并行分批处理,空输入时建议加 -r 避免误执行。

xargs 的 -n 参数用于控制每次调用下游命令时最多传递几个参数,避免单次命令因参数过多而失败,也便于分批处理。
基本用法:指定每批参数数量
语法为 xargs -n N command,其中 N 是正整数,表示每次最多取 N 个输入项作为参数传给 command。
- 例如:
echo "a b c d e" | xargs -n 2 echo输出两行:
a b
c d
e
(最后剩一个参数也单独执行一次) - 若输入来自文件:
cat files.txt | xargs -n 3 rm,即每批删 3 个文件
配合 -I 使用时要注意顺序
当需要自定义替换符(如 -I{})时,-n 必须写在 -I 前面,否则 xargs 会报错或行为异常。
- ✅ 正确:
printf "%s\n" file1 file2 file3 file4 | xargs -n 2 -I{} cp {} /backup/
每次复制两个文件到 /backup/ - ❌ 错误:
xargs -I{} -n 2 ...—— 这样 -n 会被忽略
与 -P 并用实现并行分批处理
-n 和 -P(并行进程数)可组合使用,让多组参数并行执行。
- 例如:
seq 1 12 | xargs -n 3 -P 4 echo "group:"
会启动最多 4 个 echo 进程,每组 3 个数字,共输出 4 行(12÷3=4),基本是并发完成 - 注意:-P 不保证严格按顺序执行,适合无依赖的批量任务
常见误区提醒
- -n 0 是非法的,xargs 会报错;最小有效值是 1
- 如果输入为空,xargs 默认不运行命令;加 -r 可确保空输入时不执行(推荐加上)
- 遇到含空格、换行、引号的文件名,单纯用 -n 不够安全,应搭配 -0 和 find -print0 使用











