linux xargs,-exec,|管道的區(qū)別

管道 |

管道是一種通信機制西采,通常用于進程間的通信(也可通過socket進行網(wǎng)絡(luò)通信)席吴,它表現(xiàn)出來的形式將前面每一個進程的輸出(stdout)直接作為下一個進程的輸入(stdin)蒸绩。

xargs

將前一個命令的輸出作為命令行參數(shù)傳給后面的命令肛捍。

-exec

  • 要結(jié)合{};來用, {}表示前面查詢的結(jié)果;結(jié)束符\;這是固定的寫法
  • 參數(shù)是一個一個傳遞的,傳遞一個參數(shù)執(zhí)行一次
  • 文件名有空格等特殊字符也能處理

標(biāo)準(zhǔn)輸入與管道命令

cat /etc/passwd | grep root

上面的代碼使用了管道命令(|)。管道命令的作用耳高,是將左側(cè)命令(cat /etc/passwd)的標(biāo)準(zhǔn)輸出轉(zhuǎn)換為標(biāo)準(zhǔn)輸入,提供給右側(cè)命令(grep root)作為參數(shù)所踊。
因為grep命令可以接受標(biāo)準(zhǔn)輸入作為參數(shù)泌枪,所以上面的代碼等同于下面的代碼。

 grep root /etc/passwd

但是秕岛,大多數(shù)命令都不接受標(biāo)準(zhǔn)輸入作為參數(shù)碌燕,只能直接在命令行輸入?yún)?shù),這導(dǎo)致無法用管道命令傳遞參數(shù)继薛。舉例來說修壕,echo命令就不接受管道傳參。

echo "hello world" | echo

上面的代碼不會有輸出遏考。因為管道右側(cè)的echo不接受管道傳來的標(biāo)準(zhǔn)輸入作為參數(shù)慈鸠。

linux常用的可用于管道操作的命令

命令 作用 實例
cut 將一段信息的某一段切出來,處理的信息是以行為單位灌具。 echo $PATH | cut -d ':' -f 3-5 //將path的值按照':'進行分割青团,后取出第3到5個值
grep 分析一行信息,如果有匹配的稽亏,就將該行拿出來壶冒。 cat /etc/passwd | grep root //列出輸出中帶有root的行
sort 可以依據(jù)不同的數(shù)據(jù)類型進行排序缕题。 cat /etc/passwd | sort -t ':' -k 3 -n //根據(jù) passwd中每行截歉,按':'分隔符進行分隔后,按照第3個字段使用純數(shù)字的方式進行排序烟零。
uniq 重復(fù)的行只顯示一個 last | cut -d ' ' -f1 | sort | uniq -c //列出登錄者名字瘪松,并進行排序,進行統(tǒng)一處理锨阿,并計數(shù)宵睦。
wc 統(tǒng)計指定文件中的字節(jié)數(shù)、字?jǐn)?shù)墅诡、行數(shù)壳嚎,并將統(tǒng)計結(jié)果顯示輸出 cat /etc/man.config | wc //輸出三個數(shù)字,分表代表行末早,字?jǐn)?shù)烟馅,字符數(shù)
tee 雙重定向,存到文件/設(shè)備的同時然磷,輸出到屏幕以便繼續(xù)處理 ls -l / | tee -a file.list | more //把文件目錄輸出到file.list中郑趁,同時用more將其輸出到屏幕

xargs與-exec的區(qū)別

  • exec是對每個找到的文件執(zhí)行一次命令,除非這單個的文件名超過了幾k姿搜,否則不
    會出現(xiàn)命令行超長出報錯的問題寡润。
  • 而xargs是把所有找到的文件名一股腦的轉(zhuǎn)給命令捆憎。當(dāng)文件很多時,這些文件名組合成的命
    令行參數(shù)很容易超長梭纹,導(dǎo)致命令出錯躲惰。
find . -name '*.txt' -type f | xargs echo begin

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

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

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

  • find | xargs 這種組合在處理有空格字符的文件名時也會出錯礁扮,因為這時執(zhí)行的命令已經(jīng)不知道哪些是分割符、哪些是文件名中的空格瞬沦!
find /path -type f -print0 | xargs -0 rm

find命令有一個特別的參數(shù)-print0太伊,指定輸出的文件列表以null分隔。然后逛钻,xargs命令的-0參數(shù)表示用null當(dāng)作分隔符僚焦。由于分隔符是null,所以處理包含空格的文件名曙痘,也不會報錯芳悲。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市边坤,隨后出現(xiàn)的幾起案子名扛,更是在濱河造成了極大的恐慌,老刑警劉巖茧痒,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肮韧,死亡現(xiàn)場離奇詭異,居然都是意外死亡旺订,警方通過查閱死者的電腦和手機弄企,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來区拳,“玉大人拘领,你說我怎么就攤上這事∮5鳎” “怎么了约素?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笆凌。 經(jīng)常有香客問我圣猎,道長,這世上最難降的妖魔是什么菩颖? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任样漆,我火速辦了婚禮,結(jié)果婚禮上晦闰,老公的妹妹穿的比我還像新娘放祟。我一直安慰自己鳍怨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布跪妥。 她就那樣靜靜地躺著鞋喇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪眉撵。 梳的紋絲不亂的頭發(fā)上侦香,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音纽疟,去河邊找鬼罐韩。 笑死,一個胖子當(dāng)著我的面吹牛污朽,可吹牛的內(nèi)容都是我干的散吵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蟆肆,長吁一口氣:“原來是場噩夢啊……” “哼矾睦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起炎功,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤枚冗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蛇损,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赁温,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年州藕,在試婚紗的時候發(fā)現(xiàn)自己被綠了束世。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡床玻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沉帮,到底是詐尸還是另有隱情锈死,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布穆壕,位于F島的核電站待牵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏喇勋。R本人自食惡果不足惜缨该,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望川背。 院中可真熱鬧贰拿,春花似錦蛤袒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荚守,卻和暖如春珍德,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矗漾。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工锈候, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敞贡。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓晴及,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嫡锌。 傳聞我的和親對象是個殘疾皇子虑稼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354