web-dev-qa-db-ja.com

ack:1つのディレクトリのみを除外し、他のディレクトリはすべて同じ名前のままにします

私のフォルダ構造は次のようになります:

/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

最初のコマンドは両方のディレクトリを無視しており、2番目のコマンドはどちらも無視していません。 appフォルダー内から、ackコマンドはどのように見えますか?

50
mattalxndr

この回答は2より前のバージョンのAck向けです この回答はAckのバージョン> = 2を参照してください

最初のものは両方ともサブディレクトリとして「データ」を持ち、デフォルトではackがサブディレクトリを検索するため、両方を無視しています。そのため、その名前のサブディレクトリは無視されます。残念ながら、2番目の方法も機能しません。これは私にとってはうまくいきます:

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

すべてのファイルを検索する-aの代わりに、ack-grep --help = typesを参照して、特定のファイルタイプのみを検索します(例:--type = text)。

24
rkulla

古いバージョンの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

(from betterthangrep.com/Changes

使用しているバージョンは--versionで確認できます。

ack --version
51
Erin Heyming