2011-03-24 47 views
0

我有和this question一樣的問題,除了在Windows中。我們的產品具有100多MB的代碼基礎,並且在那裏搜索內容需要很長時間(幾分鐘)。如果您可以將搜索範圍縮小到特定的子文件夾,這很好,但這並非總是可行。如何使用Windows快速搜索我的代碼?

我想知道是否有一些工具可以使它更快,可能通過索引。準確性是至關重要的,如果一個子字符串存在某個地方,它必須被發現,即使該文件沒有編入索引或索引已經過期。如果.svn文件夾在搜索時將被忽略,這也是理想的。

如果沒有,我想知道我是否可以自己做這樣的事情。是否有可用於此類任務的現成索引引擎?我很想知道Windows索引服務(或者這些天被稱爲的任何東西),但到目前爲止,我對它的經驗(Windows標準文件搜索工具)一直很不景氣,它經常會丟失正好在它鼻子前面的文件。

回答

0

是的,我也看到窗口索引服務未命中文件,但我沒有檢查知識庫或用戶論壇的解釋。我很高興看到它確認它不只是我;-)!

看起來有很多可用的文件索引程序,如果找不到滿足您需要的文件索引程序,我會感到驚訝(雖然見後面的內容)。

這裏有一些事情要考慮:

如果你的團隊使用IDE,是不是有一個索引功能/插件? (沒有一個SVN提供索引功能?)。 ,爲您的問題添加一些標籤,以便其他窗口開發人員可以看到使用您正在使用的相同開發環境。

您提供的SO鏈接提到了幾個選項:slocate,rlocate和我找到了mlocate。 slocate的維基百科頁面說 Locate32 for Windows Windows analog of GNU locate with GUI, released under GNU license 這似乎符合您的主要要求。用多標籤界面查看屏幕截圖(一個標記爲高級)會讓我希望能夠排除svn(至少從結果中,可能來自索引)。

您的

要求如果子存在於某個地方,它 必須找到,即使該文件不是 索引或者索引是過時的。

似乎矛盾。對於子字符串的要求,我可以看到許多索引程序忽略了clang的語法元素({([])}等),例如,'then'被刪除是因爲它被認爲是一個噪音詞,或者它被獲取歸咎於'the',那麼THEN被刪除,因爲它是噪音詞。

要到「必須要找到」,和真的可以肯定,你就必須建立一個測試套件,看看有什麼索引程序是做任何事情的極端情況。 (對於100 MB的代碼庫來說,這並不是問題所在,特別是因爲您正在考慮自行開發)。

最後'即使文件未被索引...'。那麼,你要麼使用索引,要麼不使用(顯然)。不幸的是,爲了您的要求,雖然rlocate一直在尋找變化,但slocate(在Unix上)看起來並不如此。可能如果你閱讀/檢查locate32的文檔或用戶論壇,你會得到你需要的答案。

Rlocate會給你你所需要的,但是從rlocate page'rlocate只能在2.6版本的Linux上運行'。 mlocate似乎只有一個Windows端口。

最後,這裏是我發現的有趣的關於mlocate的鏈接:mlocate vs rlocate。這是google緩存,因爲redhat.com說'不可用'。

+0

「即使文件沒有編入索引或索引已過期」大概意味着索引存儲了諸如修改日期之類的元數據,文件的完整列表是從目錄中獲取的,並且對於每個文件索引是在元數據匹配時使用,否則打開文件並執行線性搜索(也可能在過程中更新索引)。 – 2011-03-27 03:25:06

+0

@ BenVoigt:我把他的短語的意思,沒有索引,因爲只有開發副本已經改變(可能還沒有寫入文件?)(或沒有簽入)或索引器週期還沒有拿起變化。 「在規範中永遠不要說'從不'(除非你真的**是這個意思)。但規格是另一個主題。 ;-)感謝您的替代見解! – shellter 2011-03-27 03:48:19

+0

Doah,他沒有說永遠不會,而是「它必須找到」(羞怯的樣子);%,這在用例中也是相當無情的。晚了,G-night! – shellter 2011-03-27 04:00:29