亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

在說(shuō)xargs命令之前,先說(shuō)兩句linux中的管道(pipe)。

管道負(fù)責(zé)單向連接前一個(gè)程序的標(biāo)準(zhǔn)輸出與后一個(gè)程序的標(biāo)準(zhǔn)輸入,其本質(zhì)是一個(gè)共享文件。我們?nèi)粘W畛S玫降墓艿朗悄涿艿溃琒hell中的管道符號(hào)為“|”。

淺談Linux中的xargs命令

 

有空會(huì)讀讀與管道有關(guān)的內(nèi)核源碼的,比如pipe()

管道用法舉例:

  • 打印/usr/lib目錄下的內(nèi)容,按大小排序,并分頁(yè)顯示行號(hào)
ll -Sh /usr/lib | less -N
  • 取出歷史登錄信息中的用戶名,排序、去重并計(jì)數(shù)
last | cut -d ' ' -f 1 | sort | uniq -c
  • 殺掉所有正在運(yùn)行的redis-cli進(jìn)程
kill -15 `ps aux | grep redis-cli | grep -v grep | awk '{print $2}'`

那么xargs命令又和管道有什么關(guān)系呢?如果把上面的第三個(gè)例子換一種寫法:

淺談Linux中的xargs命令

 

這說(shuō)明kill命令沒有接收到應(yīng)有的參數(shù)。還有很多命令(比如最常見的mkdir、rm、cp等等等)都不會(huì)從標(biāo)準(zhǔn)輸入讀取內(nèi)容,這時(shí)如果在管道符后加上xargs,再加上要執(zhí)行的命令,那么前一個(gè)程序的標(biāo)準(zhǔn)輸出就會(huì)作為后一個(gè)程序的參數(shù),而不是標(biāo)準(zhǔn)輸入了。

淺談Linux中的xargs命令

 

Dash軟件中xargs命令的man page

看官可以嘗試執(zhí)行以下兩對(duì)命令,看看輸出有什么不同,能夠加深理解:

  • echo '--help' | cat與echo '--help' | xargs cat
  • 隨便找一個(gè)Spring項(xiàng)目的代碼目錄,分別執(zhí)行find . -name '*.JAVA' | grep Impl與find . -name '*.java' | xargs grep Impl

同樣地,上面例子中的kill命令應(yīng)該改寫成:

ps aux | grep redis-cli | grep -v grep | awk '{print $2}' | xargs kill -15

xargs命令本身也有一些參數(shù),使用方法很靈活,下面再舉幾個(gè)例子。

  • 自定義分隔符
  • xargs默認(rèn)用IFS(inner field separator,即內(nèi)部域分隔符,包含空格、制表符、換行符)分割上一個(gè)程序的標(biāo)準(zhǔn)輸出。如果要用其他分隔符,可以用-d參數(shù),例如:
~ echo '1,2,3,4,5' | xargs -d ',' echo
1 2 3 4 5

特別地,用-0(注意是數(shù)字0)參數(shù)可以指定NULL字符''作為分隔符。

  • 分批傳參
  • 用-n參數(shù)可以規(guī)定每次傳遞多少個(gè)參數(shù)給后面的命令,它可以單用,也可以與-d配合使用,例如:
~ echo '1,2,3,4,5,6,7,8,9' | xargs -d ',' -n 4 echo
1 2 3 4
5 6 7 8
9
  • 指定終止符
  • 用-E參數(shù)可以指定xargs在遇到哪個(gè)字符串時(shí)停止解析(不含該字符串)。-E不能與-d同用,例如:
~ echo 'cd pwd ls ps' | xargs -E 'ls' echo
cd pwd
  • 交互式執(zhí)行
  • 用-p參數(shù)就會(huì)在每次執(zhí)行命令之前詢問,輸入y(yes)才會(huì)真正執(zhí)行。如果只是想觀察命令本身,可以用-t參數(shù)。例如:
~ echo '1,2,3,4,5,6,7,8,9' | xargs -d ',' -n 4 -t echo
echo 1 2 3 4
1 2 3 4
echo 5 6 7 8
5 6 7 8
echo 9
9
  • 指定替換參數(shù)位置
  • xargs接收的參數(shù)默認(rèn)會(huì)分配到下一個(gè)命令的結(jié)尾,即追加。如果想要指定替換的參數(shù)位置,可以用-I或者-i參數(shù)。其中,-i固定用雙大括號(hào){}作為占位符,-I則可以自行指定其他符號(hào)作為占位符。這個(gè)東西很有用,例如:
# 計(jì)算表達(dá)式的值
~ echo '77' | xargs -I 'q' expr 2 * q + 8
162
# 批量重命名目錄下的文件
~ ls | xargs -i mv {} {}.bak
# 批量復(fù)制目錄下的文件
~ find . -name "*.jar" | xargs -i cp {} /opt/cloudera/jars

mv、cp等命令對(duì)參數(shù)列表的長(zhǎng)度有限制,如果按普通方法一次操作太多文件,會(huì)報(bào)“Argument list too long”錯(cuò)誤。而xargs每次傳參時(shí)是以默認(rèn)128KB的批次進(jìn)行,所以一切正常。批次大小還可以用-s參數(shù)自行指定。

作者:LittleMagic

鏈接:https://www.jianshu.com/p/0aa07a901825

來(lái)源:簡(jiǎn)書

分享到:
標(biāo)簽:Linux xargs
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定