每天一個 Linux 命令(21):find命令之xargs

發表於2016-12-31

在使用 find命令的-exec選項處理匹配到的檔案時, find命令將所有匹配到的檔案一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令執行幾分鐘之後,就會出現溢位錯誤。錯誤資訊通常是“引數列太長”或“引數列溢位”。這就是xargs命令的用處所在,特別是與find命令一起使用。

find命令把匹配到的檔案傳遞給xargs命令,而xargs命令每次只獲取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分檔案,然後是下一批,並如此繼續下去。

在有些系統中,使用-exec選項會為處理每一個匹配到的檔案而發起一個相應的程式,並非將匹配到的檔案全部作為引數一次執行;這樣在有些情況下就會出現程式過多,系統效能下降的問題,因而效率不高; 而使用xargs命令則只有一個程式。另外,在使用xargs命令時,究竟是一次獲取所有的引數,還是分批取得引數,以及每一次獲取引數的數目都會根據該命令的選項及系統核心中相應的可調引數來確定。

使用例項:

例項1: 查詢系統中的每一個普通檔案,然後使用xargs命令來測試它們分別屬於哪類檔案

命令:

輸出:

例項2:在整個系統中查詢記憶體資訊轉儲檔案(core dump) ,然後把結果儲存到/tmp/core.log 檔案中

命令:

輸出:

例項3:在當前目錄下查詢所有使用者具有讀、寫和執行許可權的檔案,並收回相應的寫許可權

命令:

輸出:

說明:

執行命令後,資料夾scf、test3和test4的許可權都發生改變

例項4:用grep命令在所有的普通檔案中搜尋hostname這個詞

命令:

輸出:

例項5:用grep命令在當前目錄下的所有普通檔案中搜尋hostnames這個詞

命令:

輸出:

說明:

注意,在上面的例子中, 用來取消find命令中的*在shell中的特殊含義。

例項6:使用xargs執行mv

命令:

輸出:

例項7:find後執行xargs提示xargs: argument line too long解決方法:

命令:

輸出:

說明:

-l1是一次處理一個;-t是處理之前列印出命令

例項8:使用-i引數預設的前面輸出用{}代替,-I引數可以指定其他代替字元,如例子中的[]

命令:

輸出:

說明:

使用-i引數預設的前面輸出用{}代替,-I引數可以指定其他代替字元,如例子中的[]

例項9:xargs的-p引數的使用

命令:

輸出:

說明:

-p引數會提示讓你確認是否執行後面的命令,y執行,n不執行。

本系列文章:

每天一個 Linux 命令(1):ls命令
每天一個 Linux 命令(2):cd命令
每天一個 Linux 命令(3):pwd命令
每天一個 Linux 命令(4):mkdir命令
每天一個 Linux 命令(5):rm 命令
每天一個 Linux 命令(6):rmdir 命令
每天一個 Linux 命令(7):mv命令
每天一個 Linux 命令(8):cp 命令
每天一個 Linux 命令(9):touch 命令
每天一個 Linux 命令(10):cat 命令
每天一個 Linux 命令(11):nl 命令
每天一個 Linux 命令(12):more 命令
每天一個 Linux 命令(13):less 命令
每天一個 Linux 命令(14):head 命令
每天一個 Linux 命令(15):tail 命令
每天一個 Linux 命令(16):which命令
每天一個 Linux 命令(17):whereis 命令
每天一個 Linux 命令(18):locate 命令
每天一個 Linux 命令(19):find 命令概覽
每天一個 Linux 命令(20):find命令之exec

相關文章