天天看點

xargs指令知多少

       與xargs指令最初相識是在發現一個磁盤滿了,具體是在/var/spool/mqueue,主要原因是系統中有使用者開啟了crontab,而crontab中執行的程式有輸出内容,輸出内容會以郵件形式發給cron的使用者,而sendmail沒有啟動是以就産生了這些檔案。關于更詳細的原理,可以參考我之前的文章:crontab指令的使用介紹及我的體會。

       僅僅解決出現多檔案的方法比較簡單,在指令後加上“> /dev/null 2>&1”即可,表示程式員輸出和運作錯誤都放到黑洞裡面去,這樣就不會産生檔案了。

    如果是要解決删除多檔案的問題,則進入這個檔案夾,執行“ls | xargs rm -f ”即可。xargs可以從管道中循環讀取檔案,一次一次的把資訊輸送給後面的“rm -f”。

linux下xargs指令用法詳解:

xargs在linux中是個很有用的指令,它經常和其他指令組合起來使用,非常的靈活.

xargs是給指令傳遞參數的一個過濾器,也是組合多個指令的一個工具.它把一個資料流分割為一些足夠小的塊,以友善過濾器和指令進行處理.由此這個指令也是後置引用的一個強有力的替換.在一般使用過多參數的指令替換失敗的時候,用xargs來替換它一般都能成功.通常情況下,xargs從管道或者stdin中讀取資料,但是它也能夠從檔案的輸出中讀取資料.

xargs的預設指令是echo.這意味着通過管道傳遞給xargs的輸入将會包含換行和空白,不過通過xargs的處理,換行和空白将被空格取代.如:

bash$ ls -l

total 0

-rwxr-xr-x 2 root root 4096 2009-02-23 090218.txt

-rwxr-xr-x 2 root root 12288 2009-06-08 090607.txt

bash$ ls -l | xargs

090218.txt 090607.txt

bash$ find ~/mail -type f | xargs grep "linux"

./misc:user-agent: slrn/0.9.8.1 (linux)

./sent-mail-jul-2005: hosted by the linux documentation project.

./sent-mail-jul-2005: (linux documentation project site, rtf version)

./sent-mail-jul-2005: subject: criticism of bozo's windows/linux article

. . .

ls | xargs -p -l gzip 使用gzips壓縮目前目錄下的每個檔案,一次壓縮一個, 并且在每次壓縮前都提示使用者.

注意: 一個有趣的xargs選項是-n nn,nn是限制每次傳遞進來參數的個數.

ls | xargs -n 8 echo以每行8列的形式列出目前目錄下的所有檔案.

注意: 另一個有用的選項是-0,使用 find -print0 或 grep -lz 這兩種組合方式. 這允許處理包含空白或引号的參數.

find / -type f -print0 | xargs -0 grep -liwz gui | xargs -0 rm -f

grep -rliwz gui / | xargs -0 rm -f

上邊兩行都可以用來删除任何包含"gui"的檔案。

-i 表示 find 傳遞給xargs的結果 由{}來代替

-i 我認為是和i差不多,可以這麼認為 -i可以用-i {} 來代替

-p 互動式提問y來确認指令的每次執行。

-t 在執行前回顯各個command

還有參數-s 和 -x 具體查手冊. 

繼續閱讀