xargs
从标准输入读取数据,构建并执行命令行,常与管道配合批量处理
语法
command | xargs [options] [command]
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
-I {} |
指定替换字符串,每行输入替换一次 | |
常用 |
-n |
每次传递 N 个参数 | |
常用 |
-P |
并行执行的最大进程数 | |
常用 |
-d |
指定输入分隔符 | |
常用 |
-0 |
以 null 字符分隔输入(配合 find -print0) | |
常用 |
-t |
执行前打印命令(调试用) | |
常用 |
示例
删除所有 .log 文件
find . -name '*.log' | xargs rm
安全处理含空格的文件名
find . -name '*.js' -print0 | xargs -0 grep 'TODO'
逐行读取 URL 并请求
cat urls.txt | xargs -I {} curl -s {}4 个进程并行压缩图片
find . -name '*.png' | xargs -P 4 -I {} convert {} -resize 50% {}停止所有运行中的容器
docker ps -q | xargs docker stop
技巧
- 文件名含空格时用 find -print0 | xargs -0 避免出错
- -P 参数可以并行执行,大幅提升批量操作速度
- -I {} 让每个输入项单独执行一次命令
- xargs 默认以空白字符分割输入,-d '\n' 可以按行分割