RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 


 
主題: [教學]如何在 Unix 下面,遞迴搜尋一個子目錄所有檔案當中有無特定字串   字型大小:||| 
eric_superman
銅驢友〔高級〕
等級: 10等級: 10等級: 10


今日心情

 . 積分: 174
 . 文章: 137
 . 收花: 1523 支
 . 送花: 2678 支
 . 比例: 1.76
 . 在線: 2315 小時
 . 瀏覽: 13800 頁
 . 註冊: 7129
 . 失蹤: 118
 . TWed2k-DVD幫分流組
#1 : 2006-6-11 10:35 PM     全部回覆 引言回覆

版主 MU : 感謝您無私的分享

評分:+2   
在 Windows 下的UltraEdit ,有一個功能 "Find in Files" ,配合 Search Sub Directories 選項打開時,
可遞迴搜尋一個子目錄所有檔案當中有無特定字串,這在許多場合都很有用,
那在 Unix 時,如何搜尋呢,很多人直接想到 grep ,
可惜的是,grep無法遞迴搜尋一個子目錄下的所有檔案,grep 一次只能搜尋一個目錄的一層。
例如  /usr/include 下,通常還有 /usr/include/sys, /usr/include/netinet ,
想要找個  IPPROTO_IPV6 出現在那個 header file ,
用 grep 得試許多個子目錄。

這個時候,就要結合 find 。   find 專門用來找特定檔名的,找到後,要印,要呼叫另一個程式,都可以,

cd /usr/include
find . -name "*.h" -exec grep IPPROTO_IPV6 {} \; -print

以上的find 的參數分四大區:
1)    .    一個點,代表 current directory。
2)   -name "*.h"     -name 是用來指定檔名的條件。加了雙引號是怕 shell 把 *.h 都展開了,那 find 就會錯掉。
3)   -exec grep IPPROTO_IPV6 {} \;      -exec 是執行外部程式,grep IPPROTO_IPV6 大家都很熟, {} 則是 find
       的特殊符號,任何檔名都會代入此處,然後呼叫 grep。     \; 則是另一個 find 的特殊符號 ,代表 -exec 的結束。
4)   -print  ,印出檔名。


輸出結果如下:
  IPPROTO_IPV6   = 41,          /* IPv6-in-IPv4 tunnelling              */
./linux/in.h

    IPPROTO_IPV6 = 41,     /* IPv6 header.  */
#define IPPROTO_IPV6            IPPROTO_IPV6
./netinet/in.h


藍色部分是  find  的 -print 所印出的檔名。
其他的就是 grep 的輸出結果,
兩種輸出是交錯的。

覺得有幫到您的忙的話,就請賞點花吧!

[eric_superman 在  2006-6-13 12:16 AM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
eric_superman
銅驢友〔高級〕
等級: 10等級: 10等級: 10


今日心情

 . 積分: 174
 . 文章: 137
 . 收花: 1523 支
 . 送花: 2678 支
 . 比例: 1.76
 . 在線: 2315 小時
 . 瀏覽: 13800 頁
 . 註冊: 7129
 . 失蹤: 118
 . TWed2k-DVD幫分流組
#2 : 2006-7-13 12:35 AM     全部回覆 引言回覆

唉...我真是老了,
grep 進步到內建 recursive 都不知道!
我學Unix時的 grep ,是沒有 -r 參數的......

Anyway, 當某些功能無內建 recursive 時, find 還是派的上用場....
感謝 LSO 的指正!



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記

   

快速回覆
表情符號

更多 Smilies

字型大小 : |||      [完成後可按 Ctrl+Enter 發佈]        

溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別    關閉 表情符號    關閉 Discuz! 代碼    使用個人簽名    接收新回覆信件通知
發表時自動複製內容   [立即複製] (IE only)


 



所在時區為 GMT+8, 現在時間是 2024-11-22 12:15 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.023556 second(s), 8 queries , Qzip disabled