xargs
是 Linux 中一个强大的命令行工具,用于将标准输入(stdin)的数据转换为命令行参数。它通常与其他命令(如 find
、grep
等)结合使用,处理大量文件或文本数据时非常高效。
command | xargs [options] [command_to_execute]
将输入转换为参数
默认将 stdin 的数据作为参数追加到指定命令的末尾:
echo "file1 file2 file3" | xargs rm
→ 等价于 rm file1 file2 file3
处理多行输入
每行输入会作为一个独立参数:
echo -e "file1\nfile2\nfile3" | xargs -n 1 rm
→ 分多次执行 rm file1
、rm file2
、rm file3
选项 | 作用 |
---|---|
-n N |
每次命令使用 N 个参数(分批处理) |
-I {} |
用 {} 作为占位符,参数可插入到任意位置 |
-d DELIM |
指定输入的分隔符(默认是空格/换行) |
-p |
交互式确认后再执行命令 |
-t |
打印要执行的命令(调试用) |
-P N |
并行执行(最多 N 个进程) |
批量删除文件
find . -name "*.log" | xargs rm -f
替换占位符(参数插入中间)
find . -name "*.txt" | xargs -I {} mv {} /backup/
分批处理(每批 2 个参数)
echo "1 2 3 4 5" | xargs -n 2 echo
输出:
1 2
3 4
5
并行处理(加速操作)
find . -type f | xargs -P 4 -n 1 gzip
→ 用 4 个进程并行压缩文件
处理含空格/特殊字符的文件名
find . -name "*.pdf" -print0 | xargs -0 rm
-print0
和 -0
用 \0
分隔文件名,避免空格问题。
默认不处理空输入
如果输入为空,xargs 会跳过执行。强制运行空输入用 -r
选项(GNU 扩展)。
参数长度限制
单次命令的参数总长度受系统限制(getconf ARG_MAX
查看)。超限时需分批处理(-n
或 -s
选项)。
安全性
如果输入可能包含特殊字符(如文件名中的空格、引号),务必使用 -print0 | xargs -0
或 -d '\n'
。
统计代码行数
find src/ -name "*.py" | xargs wc -l
批量重命名
ls *.jpg | xargs -I {} mv {} {}.bak
与 grep
结合搜索内容
find /var/log -type f | xargs grep "error"
掌握 xargs
可以极大提升命令行效率,尤其在处理大量文件时!