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的參數輸入,才能得到我們想要的結果。