2013-12-16 6 views
21

フラグを繰り返さずに、Ack内の複数のディレクトリを無視することはできますか?Ack - フラグを繰り返さずに複数のディレクトリを無視する

私は、次の作品は(すなわち、複数のフラグを設定する)知っている:しかし

ack --ignore-file=ext:css,scss,orig 'teststring' 

ack --ignore-dir=install --ignore-dir=php 'teststring' 

は私が拡張子で行うことができますように、次のように私は、カンマでディレクトリを区切ることができることを期待していました、以下のコンマは動作しないフラグを無視分離:

ack --ignore-dir=install,php 'textstring' 

は、いくつかの短手相当を使用することも可能ですので、私は肝炎はありませんe --ignore-dirフラグを繰り返し入力しますか?

答えて

0

-Gオプションに正規表現を指定して除外するディレクトリを、--invert-file-matchオプションで補完する方法があります。次のようなあなたの質問に基づいて、何か:あなたは、ACK 2を使用しているので

ack -a -G 'install|php' --invert-file-match 'textstring' . 
+0

興味深いを使用しますが、私はこれは私が次のメッセージを取得したAck 2で実行可能であるとは思いません。 'オプション '-a'はack 2では有効ではありません これは、-k/- 既知の型のため、テキストファイルではなく既知の型のファイルのみを選択するようになったからです。 ack 1.x)。 .ackrcまたはACKRC_OPTIONS環境変数にオプションがあるかもしれません。 --dumpフラグを使って試してください。 ' – SparrwHawk

+0

@ Bireiのソリューションはack 1.xでのみ動作します。 -aおよび-Gフラグは、-xフラグのためにack 2で削除されました。 –

12

は、あなたのプロジェクトのルートに.ackrcファイルに--ignore-dir=install--ignore-dir=phpを置くことができます。その後、そのツリー内のすべてのack呼び出しは、それらのフラグを使用します。

31

は、それはあなたがgrepのために含めるパターンを指定する方法を、実際に似ています:

ack <term> --ignore-dir={dir_a,dir_b}

はしかし、この形式は、単一のディレクトリでは動作しません。だから、

ack <term> --ignore-dir={log}

は動作しません。

+8

{}構文はbash拡張を引き起こすことに注意してください。これはack特有のものではありません。 あなたのコマンドラインでこれを試してみてください。 は 'これは私がそれを知らなかったクールな{1,2}' – AgentLiquid

+0

@AgentLiquidであるエコー。ありがとう! :) –

+4

ブレース拡張はbash固有の機能なので、 '.ackrc'ファイルでブレース拡張機能を利用することはできません。代わりに、各 '--ignore-dir ='オプションを個別にリストアップする必要があります。 – wpcarro

5

だから、単一のディレクトリ使用に

ack <term> --ignore-dir=dir_a 

を無視するようにして複数のディレクトリを無視することは

ack <term> --ignore-dir={dir_a,dir_b} 
関連する問題