写在前面
由于在工作上经常使用mac和linux系统,对于操作命令来说,已经没有什么新鲜感了,但是xargs最近为我提供了不少帮忙,所以记录一下。
简介
xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题[1]。
注:摘自维基百科
实例
-
在没有killall命令和找不到启动脚本的情况下,快速杀死ps -ef | grep nginx | grep -v grep | awk '{print $2}' | xargs kill -9
nginx
进程。- 当然使用
/usr/local/sbin/nginx -s stop
可能也能满足你的需求 - 甚至都可以使用
for i in `ps -ef | grep nginx | grep -v grep | awk '{print $2}'`;do kill -9 $i;done;
来杀死nginx
进程。
- 当然使用
-
导出git两个分支之间的差异文件并打包。git diff branch1 branch2 --name-only | xargs zip branch-diff.zip
- 这个使用类似上面
for
循环实现起来并不难,也不麻烦 - 除了打
zip
把,它也可以打tar
包,如:git diff branch1 branch2 --name-only | xargs tar -rf branch-diff.tar
- 同理,也可以导出版本之间的差异
git diff-tree -r --no-commit-id --name-only 4fbf8e5 | xargs tar -rf commit-diff.tar
- 这个使用类似上面
-
替换当前所有包含beego的文件中的beego为zzzzz哦。grep -rl beego ./ | xargs sed -i 's/beego/zzzzz/g'
- 当然使用
sed -i 's/zzzz/beego/g' `grep -rl zzzzz ./`
可能也能满足你的需求 - 甚至都可以使用
for i in `grep -rl zzzzz ./`;do sed -i 's/zzzzz/beego/g' $i;done;
来替换.
- 当然使用
综上
通过上面三个举例,可以看到在杀死进程、打包文件、替换字符等方面都有xargs的身影,足见其之强大。它和grep
、find
、awk
等命令一起组合使用,可以实现的功能更多。