xargs
给其他命令传递参数的一个过滤器
# options
-n: 多行输出,如n2-d: 可以自定义一个定界符-I: 指定一个替换字符串通常为{}, 这个字符串在 xargs 扩展时会被替换掉, 当 -I 与 xargs 结合使用-t: 打印出 xargs 执行的命令-p: 选项确认执行的命令
# case
fd -e zip -0 | xargs -0 -I {} -t tar xvf {}: 解压全部文件ls -d */ | grep iOS | xargs -I {} sh -c 'cd {} && git fetch && git pull': 通过 git 更新符合特定特征的目录
通过 git 打印符合特定特征的目录的当前分支
ls -d */ | grep iOS | xargs -I {} sh -c 'cd {} && _current=$(git symbolic-ref --short HEAD) && echo {}: $_current'批量切换到固定 branch
ls -d */ | grep iOS | xargs -I {} sh -c 'cd {} && git fetch && git pull && git checkout <branch>删除
*.log文件find . -type f -name "*.log" -print0 | xargs -0 rm -f统计一个源代码目录中所有 php 文件的行数. 并找出最大行的文件
find . -type f -name "*.php" -print0 | xargs -0 wc -l | sort -r | head -1希望下载多个 URL
cat url-list.txt | xargs wget -c
读取配置文件, 对各个内容操作
cat <file> | tr '\n' '\0' | xargs -0 -I {} -t echo {}查找所有的 jpg 文件, 并且压缩它们
find ./docs -type f -name "*.md" -print0 | xargs -0 tar -czvf markdown.tar.gz
- 提取当前目录下所有的 git 项目的 remote url
# `2>/dev/null`: 忽略了错误信息
ls | tr ' ' '0' | xargs -I {} sh -c "cd {} && git remote -v | awk 'NR==1{print \$2}'" 2>/dev/null
1
2
2
- xargs 执行 sh , 失败继续执行
cat <file> | tr '\n' '\0' | xargs -0 -I {} sh -c 'cd {} && (echo {} && git fetch && git pull && git status || true)'
1
- 从 git url 中批量提取目录
cat <file> | tr '\n' '\0' | xargs -0 -I {} basename {} | sed 's/\.git//'
1
- 查看远程是否存在某一个分支
cat <file> | tr '\n' '\0' | xargs -0 -I {} sh -c 'cd {} && (echo {} && git fetch && git ls-remote --heads origin xxx)'
1
上次更新: 2024/11/29, 16:35:56