<code>xargs</code>從标準輸入(stdin)中讀取資料進行處理
資料以空格進行分隔
可以根據參數進行一次或多次處理,預設的處理指令是<code>/bin/echo</code>
空行不進行處理,會被忽略
遇到指令狀态為255時,xargs會立刻停止,譬如發生錯誤時.
下面我們來看看<code>xargs</code>有哪些參數可以選擇.
-a file
: 從file中讀入資料
-0
: 當輸入有特殊字元時,将其當作一般字元處理,比如""和空格
-d
: 指定分隔符
-E eof-str
: 指定結束标志為<code>eof-str</code>,<code>xargs</code>處理到這個标志就會停止
-I replace-str
: 将每行輸入輸入内容替換為<code>replace-str</code>
-i
: 等同于<code>-I{}</code>
-L max-lines
: 每次讀取<code>max-line</code>行輸入交由<code>xargs</code>處理
-l
: 類似于<code>-L</code>,差別在于<code>-l</code>可以不指定參數,預設為1.
-n max-args
: 每行執行<code>max-args</code>個輸入,預設執行所有
-p
: 互動模式,執行前詢問是否執行
-r
: 無輸入則停止執行,預設至少執行1次
-s max-chars
: <code>xargs</code>每次執行指令的最大長度(含空格)
-t
: 先列印執行的指令,然後執行
-x
: 當<code>xargs</code>執行的指令長度大于<code>-s max-char</code>時,停止執行
-P max-procs
: 修改線程數,預設為單線程.<code>max-procs</code>為0時,<code>as many processes as possible</code>
在使用find指令的-exec選項處理比對到的檔案時,find指令将所有比對到的檔案一起傳遞給exec執行。但有些系統對能夠傳遞給exec的指令長度有限制,這樣在find指令運作幾分鐘之後,就會出現溢出錯誤。錯誤資訊通常是“參數列太長”或“參數列溢出”。這就是xargs指令的用處所在,特别是與find指令一起使用。find指令把比對到的檔案 傳遞給xargs指令,而xargs指令每次隻擷取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先擷取的一部分檔案,然後是下一 批,并如此繼續下去。
在有些系統中,使用-exec選項會為處理每一個比對到的檔案而發起一個相應的程序,并非将比對到的檔案全部作為參數一次執行;這樣在有些情況下就會出現程序過多,系統性能下降的問題,因而效率不高;而使用xargs指令則隻有一個程序。另外,在使用xargs指令時,究竟是一次擷取所有的參數,還是分批取得參數,以及每一次擷取參數的數目 都會根據該指令的選項及系統核心中相應的可調參數來确定。
管道是把一個指令的輸出傳遞給另一個指令作為輸入,比如:<code>command1 | command2</code>但是command2僅僅把command1輸出的内容作為輸入參數。<code>find . -name "install.log" -print</code>列印出的是install.log這個字元串,如果僅僅使用管道,那麼command2能夠使用的僅僅是install.log這個字元串,不能把它當作檔案來進行處理。
當然這個command2除了xargs。xargs就是為了能夠對find搜尋到的檔案進行操作而編寫的。它能把管道傳來的字元串當作檔案交給其後的指令執行。
本文轉自yzy121403725 51CTO部落格,原文連結http://blog.51cto.com/lookingdream/1875024:,如需轉載請自行聯系原作者