天天看點

xargs的詳細用法

xargs的用法還不是很熟悉,特摘抄一段鳥哥的講解加深印象。

以字面意思來看,x是乘号,args是參數的意思,是以說這個指令是産生某個指令參數的意思。xargs可以讀入stdin的資料,并且以空格符或斷行符作為分辨,将stdin的資料分隔成為參數。因為是以空格作為分隔,是以如果有些檔案名或其他意義的名詞内含有空格時,xargs可能會誤判。下面是該指令的用法:

1.xargs [-0epn] command

選項和參數:

-0   :如果輸入的stdin含有特殊字元,這個-0參數可以把它還原成一般字元。該參數用于處理特殊字元。

-e   :這是EOF的意思。後面接一個字元串,當xargs分析到這個字串時,就會停止繼續工作。

-p   :在執行每個指令的參數時,都會詢問使用者的意思。

-n   :後接次數,每次command指令執行時,要使用幾個參數的意思。

當xargs的後面沒有接任何指令的時候,預設是以echo進行輸出。

examples:

1.将/etc/passwd内的第一欄取出,僅取三行,使用finger将每個帳号内容顯示出來

cut -d ':' -f1 /etc/passwd | head -n 3 | xargs finger

xargs 可以将前面指令的輸出結果處理成finger的參數

2.增加需求:每次執行finger時,都要詢問使用者是否動作?

cut -d ':' -f1 /etc/passwd | head -n 3 | xargs -p finger

-p參數可以在執行時詢問使用者是否執行該指令

3。增加需求:将所有的/etc/passwd内的帳号都以finger查閱,但一次僅查閱五個帳号

cut -d ':' -f 1 /etc/passwd | xargs -p -n 5 finger

-n參數可以将前面的輸出分成數個部分,每個部分再分别執行,這樣很有必要,因為同常每個指令後接的參數不是無限制的。

4。增加需求:待分析到lp時就結束這串指令

cut -d ':' -f1 /etc/passwd | xargs -p -e'lp' finger

注意-e與lp之間沒有空格

加上-e參數,xargs在處理到lp時,後面的其他輸入内容就被舍棄掉了

很多時候,使用xargs是因為指令不支援管線操作,是以我們可以通過xagrs來提供該指令引用标準輸入之用。

example:

5.找出/sbin下具有特殊權限的文檔名,并使用ls -l列出詳細屬性

find /sbin -perm +7000 | ls -l

如果這樣操作的話,僅僅列出目前目錄下所有的檔案,相當于隻執行了ls -l,這是因為ls -l不支援管線操作的緣故。

find /sbin -perm +7000 | xargs ls -l

這樣做,xargs會将前面的find的結果作為ls -l的參數輸入,才能得到我們想要的結果。

繼續閱讀