您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“shell中xargs、-exec與管道間的區別是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“shell中xargs、-exec與管道間的區別是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
(1)將前一個命令的標準輸出傳遞給下一個命令,作為它的參數,xargs的默認命令是echo,空格是默認定界符
(2)將多行輸入轉換為單行
front command | xargs -option latercommand
front command: 前一個命令
-option: xargs的選項
later command: 后一個命令
一般與管道“|”結合使用
-n: 指定一次處理的參數個數
-d: 自定義參數界定符
-p: 詢問是否運行 later command 參數
-t : 表示先打印命令,然后再執行
-i : 逐項處理
…更多參數查看man xargs
管道“|” 用來將前一個命令的標準輸出傳遞到下一個命令的標準輸入。
xargs 將前一個命令的標準輸出傳遞給下一個命令,作為它的參數。
可見,標準輸入與命令參數是不同的。個人理解,命令參數就是直接跟在命令后面的,標準輸入可以是鍵盤,文件等。
所以,管道符 | 所傳遞給程序的不是簡單地在程序名后面輸入的參數,它們會被程序內部的讀取功能如scanf和gets等接收,而xargs則是將內容作為普通的參數傳遞給程序,相當于直接跟在命令后面。況且,有些命令是不接受標準輸入的,比如kill,rm等命令。
總結:管道符后不加xargs相當于先將xargs后面的命令回車執行一下再從鍵盤里輸入管道符前面命令執行的結果內容
加上xargs 相當于執行命令(xargs后面的命令)后,直接從鍵盤輸入管道符前面命令執行的結果內容再回車,即管道前面的結果直接跟在xargs 后面的命令后面
再總結一下,就是回車的先后順序不太一樣。
-exec:{}表示命令的參數即為所找到的文件,以;表示comman命令的結束。\是轉義符, 因為分號在命令中還有它用途,所以就用一個\來限定表示這是一個分號而不是表示其它意思。
-ok: 和 -exec 的作用相同,格式也一樣,只不過以一種更為安全的模式來執行該參數 所給出的shell給出的這個命令之前,都會給出提示,讓用戶來確定是否執行。
#xargs將參數一次傳給echo,即執行:echo begin ./xargs.txt ./args.txt
find . -name '*.txt' -type f | xargs echo begin
#exec一次傳遞一個參數,即執行:echo begin ./xargs.txt;echo begin ./args.txt
find . -name '*.txt' -type f -exec echo begin {} \;
xargs 要結合管道來完成 格式:find [option] express |xargs command 很明顯,exec是對每個找到的文件執行一次命令,除非這單個的文件名超過了幾k,否則不 會出現命令行超長出報錯的問題。 而xargs是把所有找到的文件名一股腦的轉給命令。當文件很多時,這些文件名組合成的命 令行參數很容易超長,導致命令出錯。
另外, find | xargs 這種組合在處理有空格字符的文件名時也會出錯,因為這時執行的命令 已經不知道哪些是分割符、哪些是文件名中的空格! 而用exec則不會有這個問題。
讀到這里,這篇“shell中xargs、-exec與管道間的區別是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。