2010-05-09 47 views
40

我的文件夾結構如下所示:ACK:僅排除一個目錄,但保留所有其他具有相同名稱的

/app 
/app/data 
... 
/app/secondary 
/app/secondary/data 

我想遞歸搜索/app,包括/app/data。但我不想搜索/app/secondary/data。這是我到目前爲止:

ack --ignore-dir=data searchtext 
ack --ignore-dir=secondary/data searchtext 

第一個命令是忽略這兩個目錄,第二個是忽略他們都沒有。從app文件夾中,我的ack命令應該是什麼樣子?

回答

22

此答案適用於2之前版本的Ack,請參閱This answer for versions of Ack >=2

第一個忽略了兩者,因爲它們都有'data'作爲子目錄,ack默認搜索子目錄。所以它會忽略這個名字的任何子目錄。不幸的是,你的第二種方式也行不通。這個工作對我來說:

ack -a searchtext -G '^(?!.*secondary/data.*).*$' 

相反-a的搜索所有文件,請參閱ACK-的grep --help =類型只搜索特定的文件類型,例如--type =文本

+0

謝謝爲迴應。我得到這個: $ ack-grep --text -G'^(!!。* secondary/data。*)。* $' ack-grep:找不到正則表達式。 – mattalxndr 2010-05-10 03:44:24

+0

這是因爲你忘了給它你正在尋找的模式,即'searchtext' – rkulla 2010-05-10 05:21:48

+0

有關如何將這個-G選項放在'〜/ .ackrc'文件中的信息,請參閱:http://stackoverflow.com/questions/5425363/is-it-it-add-ag-option-to-ackrc – 2011-03-24 21:52:53

47

老ack版本只能使用文件夾名稱,而不能使用文件夾路徑。截至1.93_02版本,他們已經加入這種能力:

1.93_02  Wed Oct 6 21:39:58 CDT 2010 
    [ENHANCEMENTS] 
    The --ignore-dir option now can ignore entire paths relative 
    to your current directory. Thanks to Nick Hooey. For example: 

     ack --ignore-dir=t/subsystem/test-data 

(從betterthangrep.com/Changes

你可以檢查你有--version的版本:

ack --version 
+0

在ack 2.0中不起作用https://github.com/petdance/ack2/issues/291 – geekQ 2015-06-29 16:27:57

相關問題