2012-01-13 77 views
6

這應該很簡單,但我沒有搞清楚。我在Linux下有一個超過4GB的大代碼庫。構建期間會生成一些頭文件和xml文件(使用gnu make)。如果重要的話,頭文件是基於xml文件生成的。基於時間戳的grep文件

我想在一個時間實例(它是我的開始編譯時間)之後最後修改的頭文件中搜索關鍵字,以及類似的xml文件,但單獨的grep查詢。

如果我在所有可能的頭文件或xml文件上運行它,它會花費很多時間。只有那些是自動生成的。此外,搜索必須是遞歸的,因爲有很多目錄和子目錄。

+0

您可能想要包含當前命令的示例。節省我們指出你已經知道的明顯東西的麻煩。 – sehe 2012-01-13 15:12:02

回答

11

要在所有文件中找到'pattern'更新比some_file在當前目錄及其子目錄遞歸:

find -newer some_file -type f -exec grep 'pattern' {} + 

你可以在date -d格式直接指定時間戳記,並使用其他find測試如,-name-mmin

如果find太慢,文件列表也可能由您的構建系統生成。

更具體的工具,如acketagsGCCSense可能被用來代替grep

+0

謝謝,我遇到了比回答更有價值的東西。我從未遇到過GCCSense。我正在尋找vim中的eclipse代碼補全功能。猜猜它最近開發的。 – Kamath 2012-01-16 05:09:15

+0

爲什麼地球上有一個「新手」標誌,但不是「 - ol」標誌? – Guillochon 2016-05-14 16:12:35

+2

@Guillochon:['! -newer'](http://stackoverflow.com/q/13838845/4279) – jfs 2016-05-14 16:17:06

11

您可以使用find命令:

find . -mtime 0 -type f 

並在過去的24小時(-mtime 0進行了修改,當前目錄(.)所示打印所有文件(-type f)的列表,1人48小時,2將是72小時,...)。嘗試

grep "pattern" $(find . -mtime 0 -type f) 
+0

真棒解答,在CentOS 5.6上運行良好。 – crmpicco 2013-12-09 10:06:30

1

使用此。因爲如果find沒有返回文件,則grep將繼續等待輸入暫停腳本。

find . -mtime 0 -type f | xargs grep "pattern"