记录一次linux命令的学习,主要涉及管道命令,grep,xargs,以及对git branch的-d, -D两者的比较。
记录一次linux命令的学习
linux 命令实际应用
工作中,任务数量上去了之后,对应的git分支都很多,且很多feat分支的上游分支(远程分支)都已经在合并后被删除了,本地留存了太多无用分支,遂搜索查到一个命令用于批量删除本地分支。
git branch | grep 'cpt-CSM-*' | xargs git branch -d
这个复杂命令涉及到了linux的 |
, grep
,xargs
,以及我们熟悉的git branch
管道命令
管道命令使用 |
分隔开来,左侧命令产生一个标准输出,传递给右侧命令,且右侧命令要接受标准输入。管道命令只会处理前一个命令的正确输出,错误输出不处理。
Grep命令
例子:grep npm README.md
主要是在文件中查找文本,若没有指定文件名,则从标准输入中获取。
支持正则查询grep -e 'cpt-CSM-*'
xargs
例子:find *.md | xargs wc -l
找到md结尾的文件,计算文件行数量。wc
命令不支持标准输入,所以使用xargs
将管道命令的上一个命令的标准输入
转成命令行参数。
作用:当管道命令使用了无法接受标准输入(stdin)的命令时,可以通过xargs命令,将标准输入
转化为命令行参数
。
个人猜测,xargs的原理是,将标准输入流的参数转化为参数列表(根据其options 参数,可能会涉及到参数分批,多子进程并发执行),将收集到的参数列表作为命令行参数,再用子命令程序执行命令。其他具体用法查阅这篇文章
git branch
git branch
可以打印当前本地仓库的所有分支。
git branch -d [branchName]
可以删除指定的分支。
git branch -d
和git branch -D
的区别是,-D
是强制性的。而-d
会检查当前删除分支是否已经有上游分支,或者当前HEAD指针是否有设置上游分支,”上游分支“是指托管在gitlab/github上的远程分支,具体信息查阅git branch --help
输出。所以日常删除本地分支,还是使用-d
参数,避免删除了还没提交远程的重要的分支。
结论
所以git branch | grep 'cpt-CSM-*' | xargs git branch -d
的实际意义就是,
git branch
输出本地仓库所有分支grep 'cpt-CSM-*'
查找所有以cpt-CSM-
开头的分支xargs git branch -d
xargs转化标准输入为命令行参数,并将参数传递给git branch -d
命令并执行。