寫在前面
由于在工作上經(jīng)常使用mac和linux系統(tǒng)适篙,對于操作命令來說昵观,已經(jīng)沒有什么新鮮感了,但是xargs最近為我提供了不少幫忙愉老,所以記錄一下场绿。
簡介
xargs是一條Unix和類Unix操作系統(tǒng)的常用命令。它的作用是將參數(shù)列表轉(zhuǎn)換成小塊分段傳遞給其他命令嫉入,以避免參數(shù)列表過長的問題[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
循環(huán)實現(xiàn)起來并不難妖泄,也不麻煩 - 除了打
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
等命令一起組合使用檬姥,可以實現(xiàn)的功能更多。