命令簡介
xargs可以将stdin中以空格或換行符進行分隔的數據,形成以空格分隔的參數(arguments),傳遞給其他命令。因為以空格作為分隔符,所以有一些文件名或者其他意義的字符串内含有空格的時候,xargs可能會誤判。簡單來說,xargs的作用是給其他命令傳遞參數,是構建單行命令的重要組件之一。
之所以要用到xargs,是因為很多命令不支持使用管道|來傳遞參數,例如:
find/sbin-perm 700|ls-l#這個命令是錯誤,因為标準輸入不能作為ls的參數
find/sbin-perm 700|xargsls-l#這樣才是正确的
xargs[OPTIONS][COMMAND]
注意,長選項的強制性參數對于短選項也是強制的。
-0,--null
#如果輸入的stdin含有特殊字符,例如反引号`、反斜杠、空格等字符時,xargs将它還原成一般字符。為默認選項
-a,--arg-file=FILE
#從指定的文件FILE中讀取輸入内容而不是從标準輸入
-d,--delimiter=DEL
#指定xargs處理輸入内容時的分隔符。xargs處理輸入内容默認是按空格和換行符作為分隔符,輸出arguments時按空格分隔
-EEOF_STR
#EOF_STR是endoffilestring,表示輸入的結束
-e,--eof[=EOF_STR]
#作用等同于-E 選項,與-E 選項不同時,該選項不符合POSIX标準且EOF_STR不是強制的。如果沒有EOF_STR則表示輸入沒有結束符
-IREPLACE_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
-LMAX_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
#顯示版本信息并退出
1、将 Shell 的特殊字符反引号還原為一般字符。
echo'`0123`456789'|xargs-techo
echo`0123`456789
`0123`456789
如果直接進行如下操作,會報無法找到命令 01234 的錯誤,因為反引号在 Shell 中會将 01234 作為一個命令來執行,但是 01234 不是一個命令。-t 表示先打印命令,然後再執行。值得收藏!Linux系統常用命令速查手冊
echo`01234`56789
-bash:01234:commandnotfound
2、設置 xargs 讀入參數時的結束标識,以逗号結束。這裡要注意結束标志必須要是單獨的字段,即以空格或者換行符分隔的字段。
echo01234,56789|xargs-E","
01234
3、使用 rm、mv 等命令同時操作多個文件時,有時會報 “argument list too long” 參數列表過長的錯誤,此時可以使用 xargs 來解決。xargs 将标準輸入的字符串分隔後,作為參數傳遞給後面的命令。例如,給當前目錄的所有文件添加後綴名。
ls|xargs-t-imv{}{}.bak
#選擇符合條件的文件
ls|grep-E"201701|201702|201703"|xargs-I{}mv{}{}.bak
4、設置命令行的最大字符數。參數默認一個一個單獨傳入命令中執行。
echo"0123456789"|xargs-t-s11
echo01234
01234
echo56789
56789
5、設置标準輸入中每次多少行作為命令的參數,默認是将标準輸入中所有行的歸并到一行一次性傳給命令執行。
echo-e"01234n56789n01234"|xargs-t-L2echo
echo0123456789
0123456789
echo01234
01234
6、将文件内容以空格分隔合并為一行輸出。
#列出文件内容
cattest.txt
abcde
fghij
klmno
#多行輸入合并為一行輸出
cattest.txt|xargs
abcdefghijklmno
7、與ps、grep、awk和kill結合,強制終止指定進程。
ps-ef|grepspp|awk'{printf"%s",$2}'|xargskill-9
1
ps -ef|grep spp用于查找包含 spp 的進程,awk '{printf "%s ",$2,FNR}将目标進程 ID 打印輸出,xargs kill -9則将目标進程 ID 作為參數傳遞給kill -9用于殺死進程。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!