91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

漫談-exec與xargs

發布時間:2020-07-30 08:52:16 來源:網絡 閱讀:872 作者:hk1578 欄目:系統運維

-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,一見高下。

  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文化。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漳平市| 剑阁县| 桐梓县| 英德市| 子洲县| 伽师县| 昌江| 延寿县| 内丘县| 崇仁县| 图木舒克市| 台江县| 龙川县| 平原县| 牟定县| 汨罗市| 石林| 定兴县| 临泉县| 金塔县| 固镇县| 泸水县| 岱山县| 乌恰县| 颍上县| 名山县| 龙山县| 大足县| 冕宁县| 来凤县| 西丰县| 南宫市| 西藏| 凯里市| 鄄城县| 永济市| 黄龙县| 永定县| 阿克苏市| 紫金县| 印江|