精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

漫談-exec與xargs

-exec與xargs常和find聯合在一起使用,實現對文件的操作。

-exec是find的一個選項,而不是exec命令。對于find命令,其命令選項參數非常特別,不是常見的UNIX-style的單字母選項,而采用了由單詞構成,專業點說是指示性選項(predicate),這構成了一種新的UNIX-style命令語法規范。
find為啥要加-exec,這又得談下UNIX-sytle,UNIX特別強調命令的功能和魔法,喜歡用一個命令實現多個功能。所以,高手們也特中意于單行命令,盡管不惜用管道不斷地把多個命令串起來。我想,開發find命令的大佬肯定是覺得單find到東西太簡單了,體現不了自己UNIX-sytle的范兒,所以就加上-exec這個選項,對find到的東西做進一步的靈活操作。
BTW,多了解些UNIX-style,你就逐步認識融入UNIX文化,對各種命令有了從骨子上的認識,應用起來會更加得心應手。

xargs與-exec明顯不同,xargs可是單個的命令,功能要更加強大。xargs從字面上理解為,args表示多個參數(arguments),有了多個參數,就可聯想到參數列表。最前面的x表示執行或操作(eXecute)。綜合起來,就是對參數列表進行操作。

簡單地看,-exec是找到一個文件就執行一次命令操作,xargs則是先把所有文件都找齊,再統一進行命令操作。舉個例子,對于要find到1000個文件進行grep操作,find會為找到的第一個文件fork出一個子進程,這個子進程再進行grep操作。這時,find主進程卻在等待,等到fork出去的子進程grep操作完成了,再進行下一個文件的尋找。這是個很休閑的處理方式。xargs命令卻不同,xargs是一次找齊了所有文件,再用一個grep命令一次操作搞定。至于xargs對超長的參數列表還要進行分組,就不細談了。
xargs明顯比-exec的效率要高出不少。舉個實際例子PK,一見高下。

創新互聯長期為上1000+客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為稷山企業提供專業的成都網站制作、做網站,稷山網站改版等技術服務。擁有十年豐富建站經驗和眾多成功案例,為您定制開發。

  1. [root@localhost ~]# time find /usr/include -type f -exec grep NFS_VERSION {} \; 
  2.         version NFS_VERSION { 
  3. #define NFS_VERSION 2 
  4.  
  5. real    0m17.328s 
  6. user    0m5.418s 
  7. sys     0m8.421s 
  8. [root@localhost ~]# time find /usr/include -type f|xargs grep NFS_VERSION 
  9. /usr/include/rpcsvc/nfs_prot.x: version NFS_VERSION { 
  10. /usr/include/rpcsvc/nfs_prot.h:#define NFS_VERSION 2 
  11.  
  12. real    0m0.095s 
  13. user    0m0.031s 
  14. sys     0m0.061s 

看sys指標,8.421s vs 0.061s, 140倍的差距。
xargs很強大,但使用時若碰到命名不規范的文件命名,就會發生問題,比如"a b.txt",它會理解成"a"和"b.txt"2個文件,解決的方法是在find中加"-print0"選項(注意是數字0,find的選項可都是由單詞構成的,所以是print0,一個復合詞嘛),意思找到一個文件就在文件名加上空字符('\0'),做為文件分割符,然后還必須在xargs加上"-0"選項,表示前面find過來的文件參數列表時是用'\0'做為文件分割符的,這樣就能正確地識別區分每個文件了。上例中,較規范的寫法就變為:

  1. [root@localhost ~]# time find /usr/include -type f -print0 |xargs -0 grep NFS_VERSION 
  2. /usr/include/rpcsvc/nfs_prot.x: version NFS_VERSION { 
  3. /usr/include/rpcsvc/nfs_prot.h:#define NFS_VERSION 2 
  4.  
  5. real    0m0.102s 
  6. user    0m0.036s 
  7. sys     0m0.065s 

這里面又揭示出一個矛盾,文件命名和對文件的識別操作問題之間的矛盾。UNIX-sytle可是對文件的命名規則放得相當寬松哦,搞得好像是沒有規范,后續若遇到文件名的問題再想辦法解決。大家會試問,為啥不先對文件命名進行嚴格規范,免得后續操作麻煩。但是,UNIX的一個核心理念就是文件,文件命名當然要放得開,這樣就滿足了不同的文件命名需求,至于文件名帶來的麻煩,先不管,放在一邊,以后誰碰到誰解決,這就是UNIX文化。


文章標題:漫談-exec與xargs
網頁路徑:http://m.jcarcd.cn/article/jchhds.html
主站蜘蛛池模板: 午夜福利区一区二区 | 国产精品一区视频 | 韩国电影片 | 国产女精 | 91福利www.| 九九在线精品 | 日本高清视频一区 | 3d漫画网| 国产最新在线观看 | 成人精品久 | 老熟女重囗味 | 日本高清xxxxx| 精品在线观看一区 | 日本护士毛茸茸 | 国产欧美在线人成 | 成人经典视频 | 欧美日韩一级国产 | 日韩高清乱码在 | 欧美一区日 | 精品成人欧美大片 | 尤物精品| 国产在线ts人妖 | 国产乱子伦视频大全 | 乱仑图片| 91夏晴子免费福利 | 九九精品成 | 国产精品卡一区二区 | 丝袜国产精品亚洲 | 国产手机自拍视 | 国产欧美丝袜在 | 日韩在线一 | 国产69精品 | 变态国产欧美激情成 | 青青青草国产线观 | 国产精品日产三级 | 九九国产热| 91视频哪里看 | 人人干天天开心97 | 国产精品色片 | 琪琪色18 | 伦理电影网在线观看 |