之所以能用到這個命令,關鍵是由於很多命令不支援|管道來傳遞引數,而日常工作中有有這個必要,所以就有了xargs命令,例如:
find /sbin -perm +700 |ls -l 這個命令是錯誤的
find /sbin -perm +700 |xargs ls -l 這樣才是正確的
xargs 可以讀入 stdin 的資料,並且以空白字元或換行字元作為分割符,將 stdin 的輸入分割成為 arguments 。
因為是以空白字元作為分隔,所以如果內容有空白字元時, xargs 可能會誤判!!
試試執行如下**:
echo "--help"|cat
echo "--help"|xargs cat
結果如下:
如果你直接在命令列輸入cat後回車,而不輸入命令引數,這時cat會等待標準輸入,你通過鍵盤輸入內容並按回車來,cat程序會讀取輸入並原樣返回。
所以如果此時你輸入--help,那麼cat程式會在標準輸出上輸出--help
也就是說,
來自:-0 當sdtin含有特殊字元時候,將其當成一般字元,例如:
-a file 從檔案中讀入作為sdtin,(看例一)
-e flag ,注意有的時候可能會是-e,flag必須是乙個以空格分隔的標誌,當xargs分析到含有flag這個標誌的時候就停止。(例二)
-p 當每次執行乙個argument的時候詢問一次使用者。(例三)
-n num 後面加次數,表示命令在執行的時候一次用的argument的個數,預設是用所有的。(例四)
-t 表示先列印命令,然後再執行。(例五)
-i 或者是-i,這得看linux支援了,將xargs的每項名稱,一般是一行一行賦值給{},可以用{}代替。(例六)
-r no-run-if-empty 當xargs的輸入為空的時候則停止xargs,不用再去執行了。(例七)
-s num 命令列的最好字元數,指的是xargs後面那個命令的最大命令列字元數。(例八)
-l num use at most max-lines nonblank input lines per command line.-s是含有空格的。
-l 同-l
-d delim 分隔符,預設的xargs分隔符是回車,argument的分隔符是空格,這裡修改的是xargs的分隔符(例九)
-x exit的意思,主要是配合-s使用。
-p 修改最大的程序數,預設是1,為0時候為as many as it can ,這個例子我沒有想到,應該平時都用不到的吧。
root@localhost:~/test#cat test
#!/bin/sh
echo "hello world/n"
root@localhost:~/test#xargs -a test echo
#!/bin/sh echo hello world/n
root@localhost:~/test#
root@localhost:~/test#cat txt
/bin tao shou kun
root@localhost:~/test#cat txt|xargs -e 'shou' echo
/bin tao
root@localhost:~/test#
root@localhost:~/test#cat txt|xargs -p echo
echo /bin tao shou kun ff ?...y
/bin tao shou kun ff
root@localhost:~/test#cat txt|xargs -n1 echo
/bin
taoshou
kunroot@localhost:~/test3#cat txt|xargs echo
/bin tao shou kun
root@localhost:~/test#cat txt|xargs -t echo
echo /bin tao shou kun
/bin tao shou kun
$ ls | xargs -t -i mv {} {}.bak
root@localhost:~/test#echo ""|xargs -t mv
mv mv: missing file operand
try `mv --help' for more information.
root@localhost:~/test#echo ""|xargs -t -r mv
root@localhost:~/test#
(直接退出)
root@localhost:~/test#cat test |xargs -i -x -s 14 echo "{}"
exp1
exp5
file
xargs: argument line too long
linux-2
root@localhost:~/test#
root@localhost:~/test#cat txt |xargs -i -p echo {}
echo /bin tao shou kun ?...y
root@localhost:~/test#cat txt |xargs -i -p -d " " echo {}
echo /bin ?...y
echo tao ?.../bin
yecho shou ?...tao
再如:root@localhost:~/test#cat test |xargs -i -p -d " " echo {}
echo exp1
exp5
file
linux-2
ngis_post
taotest
txtxen-3
?...y
root@localhost:~/test#cat test |xargs -i -p echo {}
echo exp1 ?...y
echo exp5 ?...exp1
yecho file ?...exp5
y
linux下 管道 和xargs的區別
linux 任何乙個命令都是呼叫了乙個可執行的程式,比如說 ls l,ls是乙個可執行檔名,l 是乙個該程式執行時候的乙個引數 管道和xargs的作用,舉個c程式來說如下 void main int argc,char argv xargs的作用就是提供程式執行時的引數,就是將xargs傳遞到上述 ...
linux 的重定向 管道 xargs 命令
重定向 管道和xargs命令都是在命令之間傳遞資料的方式。linux 的最初的理念就是 kiss keep it stupid 的縮寫。命令列命令都只做一樣事情,但是要完成得非常出色。給我最深刻印象是 tar命令。tar命令的目的只是將幾個檔案連線在一起組成乙個大檔案而已。而壓縮的程式只能壓縮單個檔...
管道命令和xargs的區別 經典解釋
一直弄不懂,管道不就是把前乙個命令的結果作為引數給下乙個命令嗎,那在 後面加不加xargs有什麼區別 newuserff 寫道 懶蝸牛gentoo 寫道 管道是實現 將前面的標準輸出作為後面的標準輸入 xargs是實現 將標準輸入作為命令的引數 你可以試試執行 echo help cat echo ...