歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> exec與xargs區別

exec與xargs區別

日期:2017/3/1 17:02:40   编辑:關於Linux

exec與xargs區別 區別描述: 兩者都是對符合條件的文件執行所給的Linux 命令,而不詢問用戶是否需
要執行該命令。 www.2cto.com -exec:{}表示命令的參數即為所找到的文件,以;表示comman命令的結束。\是轉義符,
因為分號在命令中還有它用途,所以就用一個\來限定表示這是一個分號而不是表示其它意思。 -ok: 和 -exec 的作用相同,格式也一樣,只不過以一種更為安全的模式來執行該參數
所給出的shell給出的這個命令之前,都會給出提示,讓用戶來確定是否執行。 xargs 要結合管道來完成 格式:find [option] express |xargs command 用一個實例來看看exec和xargs是如何傳參數的: $find test/ -type f test/myfile.name test/files/role_file test/files/install_file $find test/ -type f |xargs echo test/myfile.name test/files/role_file test/files/install_file $find test/ -type f -exec echo {} \; test/myfile.name test/files/role_file test/files/install_file 很明顯,exec是對每個找到的文件執行一次命令,除非這單個的文件名超過了幾k,否則不
會出現命令行超長出報錯的問題。 而xargs是把所有找到的文件名一股腦的轉給命令。當文件很多時,這些文件名組合成的命
令行參數很容易超長,導致命令出錯。 另外, find | xargs 這種組合在處理有空格字符的文件名時也會出錯,因為這時執行的命令
已經不知道哪些是分割符、哪些是文件名中的空格! 而用exec則不會有這個問題。 比如做個演示: $touch test/'test zzh' $find test/ -name *zzh test/test zzh $find test/ -name *zzh |xargs rm rm: cannot remove `test/test': No such file or directory rm: cannot remove `zzh': No such file or directory $find test/ -name *zzh -exec rm {} \; 相比之下,也不難看出各自的缺點 1、exec 每處理一個文件或者目錄,它都需要啟動一次命令,效率不好; 2、exec 格式麻煩,必須用 {} 做文件的代位符,必須用 \; 作為命令的結束符,書寫不便。 3、xargs 不能操作文件名有空格的文件; 綜上,如果要使用的命令支持一次處理多個文件,並且也知道這些文件裡沒有帶空格的文件,
那麼使用 xargs比較方便; 否則,就要用 exec了。
Copyright © Linux教程網 All Rights Reserved