ackですべてのファイルを検索


14

現在のディレクトリ内のすべてのファイル(バイナリを含む)をackv2で検索するにはどうすればよいですか?

私はやるのと同じことをしたいのですack 'foo' **が、フラグを付けるだけで、特定のディレクトリ内のすべてのファイルを**


違いack 'foo'ack 'foo' **

$ mkdir test && cd test
$ printf '\x00\x01foo1\x00' > test1
$ printf 'foo2' > test2
$ ack 'foo'
test2
1:foo2
$ ack 'foo' **
test1
1:foo1

test2
1:foo2

なぜgrepの代わりにackを使用したいのですか?
アンディレスター

1
@AndyLester私はちょうどそれackが常により良いと思ったgrep。私は間違っていた :)。
ティロ

回答:


6

デフォルトでは、Ackは現在のディレクトリの下にあるすべての非バイナリファイルでパターンを検索します。

古いAckバージョンは、--binaryフラグを渡したときにバイナリファイルを検索すると信じています。ただし、このフラグは削除されました。代わりにgrepを使用できる場合があります。

grep -ar 'foo' .

シンボリックリンクとは関係ありません。バイナリファイルに関係しています!
ティロ

@Tyilo:答えを修正しました。

13

ackにファイル名を渡さない場合、認識されないバイナリファイルを除外する組み込みのデフォルトのファイルセットで動作します。ファイル名を渡す場合、渡すすべてのファイルを検索します。これは、違いを説明ack fooしてをack foo **

ack 1

ack 1.xでは、フラグ-aを使用して、認識されないタイプのファイルをスキップしないようにackに指示します。

フラグを頻繁に使用する場合は、エイリアスを作成できalias ack='ack -a'ます。~/.bashrcまたはに行を追加します~/.zshrc。このエイリアスを設定しack、オプションなしで呼び出したい場合は、呼び出します\ack(バックスラッシュはエイリアスの展開を無効にします)。スクリプトはエイリアスの影響を受けず、インタラクティブシェルのみに影響します。

または、-aオプションをに追加できます~/.ackrc

バイナリファイル内の一致は、「バイナリファイルtest1一致」としてリストされます。Ack自体を変更せずに(少なくともプラグインを追加して)この動作を無効にする方法はありません。

ack 2

ack 2.0では、この-aオプションは削除されました。代わりにできることは、すべてのファイルに一致するタイプを定義し、-kそのタイプのすべてのファイルをackに含めるオプションを使用することです。ファイルタイプは予測不可能な順序で処理されることに注意してください。これにより、バイナリタイプのランダムなセットが通常のタイプではなく通常のように処理されます。

ack --type-set='all:match:.*' -k foo

この方法では、そうでなければバイナリに見えるファイルに対しても一致が出力されます。上記のように、これらのオプションをエイリアスまたはに追加できます.ackrc


1
@Gilles、それはかなり卑劣です。
アンディレスター

@AndyLester、なぜ-aオプションが削除されたのですか?戻り値の「これは」が、認識できないファイルタイプを検索できない理由を実際に説明していません。
ヤンデンネダル

認識されていないすべてのテキストファイルを検索するための1.xの-a動作が2.0のデフォルトになったためです。
アンディレスター

2
奇妙な、私は特別な試合-すべての種類のタイプセットが見つからなくてもということに縮小さのjsファイルを持っている...
Izkata

私がここにいるのは、縮小されたjsファイル内のテキストで、ackによって解析されないためです。答えは「add -a」のようなものだと思いました...がっかりしました。
ルチアーノファンツッツィ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.