linux下xargs和管道的區別

2021-09-07 14:26:51 字數 3206 閱讀 7343

之所以能用到這個命令,關鍵是由於很多命令不支援|管道來傳遞引數,而日常工作中有有這個必要,所以就有了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 ...