xargs能夠將stdin中以空格或換行符進行分隔的數據,造成以空格分隔的參數(arguments),傳遞給其餘命令。由於以空格做爲分隔符,因此有一些文件名或者其餘意義的字符串內含有空格的時候,xargs可能會誤判。簡單來講,xargs的做用是給其餘命令傳遞參數,是構建單行命令的重要組件之一。bash
之因此要用到xargs,是由於不少命令不支持使用管道|來傳遞參數,例如:app
find /sbin -perm +700 | ls -l # 這個命令是錯誤,由於標準輸入不能做爲ls的參數 find /sbin -perm +700 | xargs ls -l # 這樣纔是正確的
xargs [OPTIONS] [COMMAND]
注意,長選項的強制性參數對於短選項也是強制的。運維
-0, --null #若是輸入的stdin含有特殊字符,例如反引號 `、反斜槓 、空格等字符時,xargs將它還原成通常字符。爲默認選項 -a, --arg-file=FILE #從指定的文件FILE中讀取輸入內容而不是從標準輸入 -d, --delimiter=DEL #指定xargs處理輸入內容時的分隔符。xargs處理輸入內容默認是按空格和換行符做爲分隔符,輸出arguments時按空格分隔 -E EOF_STR #EOF_STR是end of file string,表示輸入的結束 -e, --eof[=EOF_STR] #做用等同於 -E 選項,與 -E 選項不一樣時,該選項不符合POSIX標準且EOF_STR不是強制的。若是沒有EOF_STR則表示輸入沒有結束符 -I REPLACE_STR #將xargs輸出的每一項參數單獨賦值給後面的命令,參數須要用指定的替代字符串REPLACE_STR代替。REPLACE_STR可使用{} $ @ 等符號,其主要做用是當xargs command後有多個參數時,調整參數位置。 例如備份以 txt 爲後綴的文件:find . -name "*.txt" | xargs -I {} cp {} /tmp/{}.bak -i, --replace[=REPLACE_STR] #做用同 -I 選項,參數 REPLACE_STR 是可選的,缺省爲 {}。建議使用 -I 選項,由於其符合 POSIX -L MAX_LINES #限定最大輸入行數。隱含了 -x 選項 -l, --max-lines[=MAX_LINES] #做用同 -L 選項,參數 MAX_LINES 是可選的,缺省爲 1。建議使用 -L 選項,由於其符合 POSIX 標準 -n, --max-args=MAX_ARGS #表示命令在執行的時候一次使用參數的最大個數 -o, --open-tty #在執行命令以前,在子進程中從新打開stdin做爲/dev/TTY。若是您但願xargs運行交互式應用程序,這是很是有用的 -P, --max-procs=MAX_PROCS #每次運行最大進程;缺省值爲 1。若是MAX_PROCS爲 0,xargs將一次運行儘量多的進程。通常和-n或-L選項一塊兒使用 -p, --interactive #當每次執行一個argument的時候詢問一次用戶 --process-slot-var=NAME #將指定的環境變量設置爲每一個正在運行的子進程中的惟一值。一旦子進程退出,將重用該值。例如,這能夠用於初始負荷分配方案 -r, --no-run-if-empty #當 xargs 的輸入爲空的時候則中止xargs,不用再去執行後面的命令了。爲默認選項 -s, --max-chars=MAX_CHARS #命令行的最大字符數,指的是xargs後面那個命令的最大命令行字符數,包括命令、空格和換行符。每一個參數單獨傳入xargs後面的命令 --show-limits #顯示操做系統對命令行長度的限制 -t, --verbose #先打印命令到標準錯誤輸出,而後再執行 -x, --exit #配合 -s 使用,當命令行字符數大於 -s 指定的數值時,退出 xargs --help #顯示幫助信息並退出 --version #顯示版本信息並退出
一、將 Shell 的特殊字符反引號還原爲通常字符。spa
echo '`0123`4 56789' | xargs -t echo echo `0123`4 56789 `0123`4 56789
若是直接進行以下操做,會報沒法找到命令 01234 的錯誤,由於反引號在 Shell 中會將 01234 做爲一個命令來執行,可是 01234 不是一個命令。-t 表示先打印命令,而後再執行。值得收藏!Linux系統經常使用命令速查手冊操作系統
echo `01234` 56789 -bash: 01234: command not found
二、設置 xargs 讀入參數時的結束標識,以逗號結束。這裏要注意結束標誌必需要是單獨的字段,即以空格或者換行符分隔的字段。.net
echo 01234 , 56789 | xargs -E "," 01234
三、使用 rm、mv 等命令同時操做多個文件時,有時會報 「argument list too long」 參數列表過長的錯誤,此時可使用 xargs 來解決。xargs 將標準輸入的字符串分隔後,做爲參數傳遞給後面的命令。例如,給當前目錄的全部文件添加後綴名。命令行
ls | xargs -t -i mv {} {}.bak # 選擇符合條件的文件 ls | grep -E "201701|201702|201703" | xargs -I {} mv {} {}.bak
四、設置命令行的最大字符數。參數默認一個一個單獨傳入命令中執行。3d
echo "01234 56789" | xargs -t -s 11 echo 01234 01234 echo 56789 56789
五、設置標準輸入中每次多少行做爲命令的參數,默認是將標準輸入中全部行的歸併到一行一次性傳給命令執行。code
echo -e "01234n56789n01234" | xargs -t -L 2 echo echo 01234 56789 01234 56789 echo 01234 01234
六、將文件內容以空格分隔合併爲一行輸出。blog
# 列出文件內容 cat test.txt a b c d e f g h i j k l m n o # 多行輸入合併爲一行輸出 cat test.txt | xargs a b c d e f g h i j k l m n o
七、與ps、grep、awk和kill結合,強制終止指定進程。
ps -ef | grep spp | awk '{printf "%s ",$2}' | xargs kill -9 1
ps -ef|grep spp用於查找包含 spp 的進程,awk '{printf "%s ",$2,FNR}將目標進程 ID 打印輸出,xargs kill -9則將目標進程 ID 做爲參數傳遞給kill -9用於殺死進程。請收藏!Linux 運維必備的 40 個命令總結
來源:https://dablelv.blog.csdn.net...