溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

shell中xargs、-exec與管道間的區(qū)別是什么

發(fā)布時(shí)間:2022-02-17 15:27:07 來(lái)源:億速云 閱讀:210 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“shell中xargs、-exec與管道間的區(qū)別是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“shell中xargs、-exec與管道間的區(qū)別是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

1、xargs作用:

(1)將前一個(gè)命令的標(biāo)準(zhǔn)輸出傳遞給下一個(gè)命令,作為它的參數(shù),xargs的默認(rèn)命令是echo,空格是默認(rèn)定界符

(2)將多行輸入轉(zhuǎn)換為單行

2、使用模式:

front command | xargs -option latercommand

front command: 前一個(gè)命令

-option: xargs的選項(xiàng)

later command: 后一個(gè)命令

一般與管道“|”結(jié)合使用

3、xargs常用選項(xiàng)

-n: 指定一次處理的參數(shù)個(gè)數(shù)

-d: 自定義參數(shù)界定符

-p: 詢問(wèn)是否運(yùn)行 later command 參數(shù)

-t : 表示先打印命令,然后再執(zhí)行

-i : 逐項(xiàng)處理

…更多參數(shù)查看man xargs

4、xargs與管道|的區(qū)別

管道“|” 用來(lái)將前一個(gè)命令的標(biāo)準(zhǔn)輸出傳遞到下一個(gè)命令的標(biāo)準(zhǔn)輸入。

xargs 將前一個(gè)命令的標(biāo)準(zhǔn)輸出傳遞給下一個(gè)命令,作為它的參數(shù)。

可見(jiàn),標(biāo)準(zhǔn)輸入與命令參數(shù)是不同的。個(gè)人理解,命令參數(shù)就是直接跟在命令后面的,標(biāo)準(zhǔn)輸入可以是鍵盤,文件等。

所以,管道符 | 所傳遞給程序的不是簡(jiǎn)單地在程序名后面輸入的參數(shù),它們會(huì)被程序內(nèi)部的讀取功能如scanf和gets等接收,而xargs則是將內(nèi)容作為普通的參數(shù)傳遞給程序,相當(dāng)于直接跟在命令后面。況且,有些命令是不接受標(biāo)準(zhǔn)輸入的,比如kill,rm等命令。

總結(jié):管道符后不加xargs相當(dāng)于先將xargs后面的命令回車執(zhí)行一下再?gòu)逆I盤里輸入管道符前面命令執(zhí)行的結(jié)果內(nèi)容

加上x(chóng)args 相當(dāng)于執(zhí)行命令(xargs后面的命令)后,直接從鍵盤輸入管道符前面命令執(zhí)行的結(jié)果內(nèi)容再回車,即管道前面的結(jié)果直接跟在xargs 后面的命令后面

再總結(jié)一下,就是回車的先后順序不太一樣。

5、xargs與-exec的區(qū)別

-exec:{}表示命令的參數(shù)即為所找到的文件,以;表示comman命令的結(jié)束。\是轉(zhuǎn)義符, 因?yàn)榉痔?hào)在命令中還有它用途,所以就用一個(gè)\來(lái)限定表示這是一個(gè)分號(hào)而不是表示其它意思。

-ok: 和 -exec 的作用相同,格式也一樣,只不過(guò)以一種更為安全的模式來(lái)執(zhí)行該參數(shù) 所給出的shell給出的這個(gè)命令之前,都會(huì)給出提示,讓用戶來(lái)確定是否執(zhí)行。

#xargs將參數(shù)一次傳給echo,即執(zhí)行:echo begin ./xargs.txt ./args.txt

find . -name '*.txt' -type f | xargs echo begin

#exec一次傳遞一個(gè)參數(shù),即執(zhí)行:echo begin ./xargs.txt;echo begin ./args.txt

find . -name '*.txt' -type f -exec echo begin {} \;

xargs 要結(jié)合管道來(lái)完成 格式:find [option] express |xargs command 很明顯,exec是對(duì)每個(gè)找到的文件執(zhí)行一次命令,除非這單個(gè)的文件名超過(guò)了幾k,否則不 會(huì)出現(xiàn)命令行超長(zhǎng)出報(bào)錯(cuò)的問(wèn)題。 而xargs是把所有找到的文件名一股腦的轉(zhuǎn)給命令。當(dāng)文件很多時(shí),這些文件名組合成的命 令行參數(shù)很容易超長(zhǎng),導(dǎo)致命令出錯(cuò)。

另外, find | xargs 這種組合在處理有空格字符的文件名時(shí)也會(huì)出錯(cuò),因?yàn)檫@時(shí)執(zhí)行的命令 已經(jīng)不知道哪些是分割符、哪些是文件名中的空格! 而用exec則不會(huì)有這個(gè)問(wèn)題。

讀到這里,這篇“shell中xargs、-exec與管道間的區(qū)別是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI