xargs命令在linux運維開發中的使用

2021-10-08 18:24:20 字數 2235 閱讀 5666

在集群運維開發過程中,根據實際開發場景,我們經常會需要大量檔案做批處理操作,無論是linux本地上的,還是hdfs上的檔案,我們都可以用xargs 命令對其逐一處理。這裡xargs命令更多的可以當作是運維開發過程中的乙個小工具,快速對批檔案做diy處理,非常靈活。

ref21

xargs命令是給其他命令傳遞引數的乙個過濾器,也是組合多個命令的乙個工具,它是構建單行命令的重要元件之一。xargs的預設命令是echo,空格是預設定界符。

常用功能:

1.輸出的資料,逐個接收,並傳遞出去用其他命令diy處理

2.將輸出的資料格式化再輸出,eg:n行變單行,單行變n行,每行m個字元。

基本用法 【-n ,-d ,-i ,-t 】

xargs作為替換工具,讀取輸入資料重新格式化輸出:

-n

jacky@xingxing myscripts % cat exa.txt

a b c

d e f

g h i

---多行變單行,限於都是單個字元

jacky@xingxingmyscripts % cat exa.txt|xargs

a b c d e f g h i

jacky@xingxing myscripts % cat exa.txt|xargs echo

a b c d e f g h i

---通過-n 指定每行個數,從而控制行數

jacky@xingxing myscripts % cat exa.txt|xargs -n2

a bc d

e fg h

i -d 【ps:mac不支援-d命令,linux 支援,分隔符】

echo "aaxbbxccxddx" |xargs -dx

aa bb cc dd

-i 【使用-i 指定乙個替換字串,名字任意取,

這個字串在xargs擴充套件時會被替換掉】

ls ./

a.txt

b.txt

c.txt

ls ./|xargs -i {} mv {} {}.bak

a.bxt.bak

b.txt.bak

c.txt.bak

-t 【列印執行日誌】

xargs結合find使用

我們需要批量刪除根據條件過濾出來的檔案時,用rm -rf aa bb 

cc ...,系統可能提示引數過多,我們可以用xargs刪除

eg:find . -type -f -name '*.log' -print0 |xargs -0 rm -rf

find -print0 和xargs -0 原理及用法

上面用到了-print0 和 xargs -0,那麼這是什麼東西呢?

查詢資料ref2

,找到了如下解釋:

find . -type -f -name 『*.log』 |xargs rm -rf

find 和xargs 一起使用時,如果這個命令如果遇到檔名裡有空格或者換行符,就會出錯。因為xargs識別字元段的標識是空格或者換行符,所以如果乙個檔名裡有空格或者換行符,xargs就會把它識別成兩個字串,自然就出錯了。

這時候就需要-print0和-0了。

答疑find -print0表示在find的每乙個結果之後加乙個null字元,而不是預設加乙個換行符。find的預設在每乙個結果後加乙個』\n』,所以輸出結果是一行一行的。當使用了-print0之後,就變成一行了

然後xargs -0表示xargs用null來作為分隔符。這樣前後搭配就不會出現空格和換行符的錯誤了。選擇null做分隔符,是因為一般程式語言把null作為字串結束的標誌,所以檔名不可能以null結尾,這樣確保萬無一失。

所以比較我們推薦的比較保險的命令是

find . -type -f -name 『*.log』 -print0 |xargs -0 rm -rf

統計乙個目錄下shell 指令碼的個數:
find . -type f -name "*.sh" -print0 | xargs -0 wc -l
查詢所有的日誌檔案,並壓縮它們:
find . -type f -name "*.log" -print | xargs tar -czvf logs.tar.gz
參考部落格↩︎

參考部落格↩︎

運維linux命令

原文 感謝博主的文章!之前做過兩年的運維,用過很多命令,深切體會到某些linux命令熟練掌握後對效率提公升有多大。舉個簡單的例子,在做了研發後經常會有跑一些資料,對於結果資料的處理,我們的產品同學一般都習慣於用excel做統計,把資料複製到excel裡,然後資料分列,排序 最後得出某些簡單的結論,我...

運維linux命令

1 linux啟動過程 開啟電源 bios開機自檢 引導程式lilo或grub 核心的引導 kernel boot 執行init rc.sysinit rc mingetty 建立終端 shell 2 網絡卡繫結多ip ifconfig eth0 1 192.168.1.99 netmask 255...

Linux運維命令

12 date date u date y m d h m s 格式化 date f date s 時間戳 date d 時間戳 格式 例 date d 1510111518 y m d h m s clock 當前的硬體時間檢視 clock s 把硬體的時間讀出來覆蓋到系統時間 clock w 把...