|
|
eric_superman
銅驢友〔高級〕
. 積分: 174
. 文章: 137
. 收花: 1523 支
. 送花: 2678 支
. 比例: 1.76
. 在線: 2315 小時
. 瀏覽: 13800 頁
. 註冊: 7129 天
. 失蹤: 118 天
. TWed2k-DVD幫分流組 |
|
|
|
|
|
|
#1 : 2006-6-11 10:35 PM
只看本作者
|
送花
(15)
送出中...
|
|
|
|
在 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 作了最後編輯]
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
|
|