在集群運維開發過程中,根據實際開發場景,我們經常會需要大量檔案做批處理操作,無論是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 -rffind 和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 把...