在 Linux 中,xargs 命令通常与 -I(大写 i)选项一起使用,用于替换字符串。
核心作用
-I replace-str 告诉 xargs:将每一行输入数据替换到命令中的 replace-str 位置,然后执行该命令。
⚠️ 注意:
-I选项会隐式启用-L 1(每次只处理一行输入),并且会禁用并行处理(即-P选项通常无效)。
基本语法
echo "file1.txt file2.txt" | xargs -I {} command {}
常见用法示例
替换字符串(最常用)
假设你想把当前目录下所有 .txt 文件复制到一个备份目录,并保留原文件名:
ls .txt | xargs -I {} cp {} /backup/
ls .txt输出每行一个文件名。-I {}表示用当前文件名替换 。- 最终执行:
cp file1.txt /backup/,cp file2.txt /backup/,依此类推。
使用自定义替换字符串
你可以用任意字符串代替 ,REPLACE:
ls .txt | xargs -I REPLACE mv REPLACE REPLACE.bak
结合其他命令使用
查找包含 “error” 的文件,并打印其所在行:
grep -l "error" .log | xargs -I {} sh -c 'echo "File: {}"; grep "error" {}'
与 -n 的区别
| 选项 | 行为 | 示例 |
|---|---|---|
-n N |
每次取 N 个参数传给命令 | xargs -n 2 echo → echo a becho c d |
-I {} |
每行输入替换一次,命令执行一次 | xargs -I {} echo {} → echo aecho b |
注意事项
-
空格和特殊字符问题:
如果文件名包含空格或换行符,xargs默认会出错,建议结合find和-print0使用:find . -name ".txt" -print0 | xargs -0 -I {} cp {} /backup/-print0:用 null 字符



