xargs 是在做什麼的呢?就以字面上的意義來看, x 是加減乘除的乘號,args 則是 arguments (參數) 的意思,所以說,這個玩意兒就是在產生某個指令的參數的意思! xargs 可以讀入 stdin
的資料,並且以空白字元或斷行字元作為分辨,將 stdin 的資料分隔成為 arguments 。
因為是以空白字元作為分隔,所以,如果有一些檔名或者是其他意義的名詞內含有空白字元的時候, xargs
可能就會誤判了~他的用法其實也還滿簡單的!就來看一看先!
[root@www ~]# xargs [-0epn] command 選項與參數: -0 :如果輸入的 stdin 含有特殊字元,例如 `, /, 空白鍵等等字元時,這個 -0 參數 可以將他還原成一般字元。這個參數可以用於特殊狀態喔! -e :這個是 EOF (end of file) 的意思。後面可以接一個字串,當 xargs 分析到 這個字串時,就會停止繼續工作! -p :在執行每個指令的 argument 時,都會詢問使用者的意思; -n :後面接次數,每次 command 指令執行時,要使用幾個參數的意思。看範例三。 當 xargs 後面沒有接任何的指令時,預設是以 echo 來進行輸出喔! 範例一:將 /etc/passwd 內的第一欄取出,僅取三行,使用 finger 這個指令將每個 帳號內容秀出來 [root@www ~]# cut -d':' -f1 /etc/passwd |head -n 3| xargs finger Login: root Name: root Directory: /root Shell: /bin/bash Never logged in. No mail. No Plan. ......底下省略..... # 由 finger account 可以取得該帳號的相關說明內容,例如上面的輸出就是 finger root # 後的結果。在這個例子當中,我們利用 cut 取出帳號名稱,用 head 取出三個帳號, # 最後則是由 xargs 將三個帳號的名稱變成 finger 後面需要的參數! 範例二:同上,但是每次執行 finger 時,都要詢問使用者是否動作? [root@www ~]# cut -d':' -f1 /etc/passwd |head -n 3| xargs -p finger finger root bin daemon ?...y .....(底下省略).... # 呵呵!這個 -p 的選項可以讓使用者的使用過程中,被詢問到每個指令是否執行! 範例三:將所有的 /etc/passwd 內的帳號都以 finger 查閱,但一次僅查閱五個帳號 [root@www ~]# cut -d':' -f1 /etc/passwd | xargs -p -n 5 finger finger root bin daemon adm lp ?...y .....(中間省略).... finger uucp operator games gopher ftp ?...y .....(底下省略).... # 在這裡鳥哥使用了 -p 這個參數來讓您對於 -n 更有概念。一般來說,某些指令後面 # 可以接的 arguments 是有限制的,不能無限制的累加,此時,我們可以利用 -n # 來幫助我們將參數分成數個部分,每個部分分別再以指令來執行!這樣就 OK 啦!^_^ 範例四:同上,但是當分析到 lp 就結束這串指令? [root@www ~]# cut -d':' -f1 /etc/passwd | xargs -p -e'lp' finger finger root bin daemon adm ?... # 仔細與上面的案例做比較。也同時注意,那個 -e'lp' 是連在一起的,中間沒有空白鍵。 # 上個例子當中,第五個參數是 lp 啊,那麼我們下達 -e'lp' 後,則分析到 lp # 這個字串時,後面的其他 stdin 的內容就會被 xargs 捨棄掉了!
所以整個作法就會變成這樣:
转至:http://linux.vbird.org/
|