2014-12-07 121 views
2

我有Ubuntu 14.04。並使用ACK-grep的2.12來搜索文件文本遞歸目錄ack(ack-grep)忽略嵌套目錄

我想 特定的目錄〜/工作區/項目設置ACK-grep的選項中/ 這樣,當我在路徑〜/工作區/項目,並確認'mypattern' 它遞歸搜索所有子和大孩子目錄,並在所有文件中遞歸地搜索。並打印結果。此外,我有一些子目錄,還有一些大的子目錄忽略它們中的所有文件。

目前我有一個文件.ackrc因爲在那裏我已經寫

--ignore-directory=is:node_modules/ 
    --ignore-directory=is:public/bower_compoenents/ 

現在,當我搜索ACK-的grep '你好' 也搜索〜/工作區/項目/ .ackrc

在我已經指示IGNORE的所有目錄中.ackrc

即使在.ackrc中使用此模式,它也會再次搜索被忽略的目錄。 (PS:這完全在Mac OS X的[編輯:可能是使用舊版本的ACK])

--ignore-dir=node_modules/ 
    --ignore-dir=public/bower_compoenents/ 

這些進一步的無工作至今

--ignore-dir=public/bower_components--ignore-dir=is:public/bower_components

我在幹嘛哪裏不對了?

編輯:尋找分辨率來忽略嵌套目錄中的搜索。 (我不想在執行命令行上的ACK-grep來提供任何特殊的選項)

回答

1

ack 2.12 manual引用:

- [無]忽略-DIR = DIRNAME, - [無] ignore-directory = DIRNAME

忽略目錄(因爲CVS,.svn等被忽略)。可能會多次使用忽略多個目錄。例如,梅森用戶可能希望包含--ignore-dir = data。 --noignore-dir選項允許用戶搜索通常會被忽略的目錄(也許研究.svn/props目錄的內容)。

DIRNAME必須始終是簡單的目錄名稱。不支持像foo/bar這樣的嵌套目錄。您需要指定--ignore-dir = foo,然後除非在命令行中明確指定,否則ack不考慮任何foo目錄中的文件。

所以看起來你需要刪除斜槓和嵌套目錄。

您確定這適用於您的其他機器嗎?該機器上有哪些版本的缺陷?

+0

我也用 - 忽略DIR =公共/ bower_components但仍ACK搜索公共/ bower_components目錄。和其他機器上,我不記得答案的版本。我只複製了.ack文件並粘貼在我的Ubuntu機器上。現在沒有Mac機器。 – codeofnode 2014-12-07 17:03:08

+0

在手冊內容的第二段中。什麼是忽略嵌套目錄的解決方案。 – codeofnode 2014-12-07 17:05:27

+0

'--ignore-dir = public/bower_components',就我所知,完全不受支持。我不知道。你可以使用'--ignore-dir = bower_components',但那會忽略我想象的任何地方。我不知道(從那一點文件具體)如何正確工作。 (「顯式地在命令行上」可能是你的最佳答案,但是'--ignore-dir = public'然後手動將所有不是'bower_components'的東西直接放在命令行上或類似的東西。 – 2014-12-07 17:15:17

1

--ignore-dir=public/bower_compoenents如果您從「public」父目錄調用ack,它應該可以工作。但是,如果它是舊版本(比1.93_02更早),它可能不適用於Ubuntu的ack版本。下載較新的ack版本(我的是2.14)。

看到這個線程:

Ignoring sub-directories in .ackrc

+0

看過ack源代碼版本2.14之後,如果你有'--noignore-dir = ...'選項(在命令行或者.ackrc中),'--ignore-dir = public/bower_compoenents'也不起作用。 – 2016-06-09 09:35:12