web-dev-qa-db-ja.com

ackはファイル名のみに基づいてファイルを見つけることができますか?

ack (ack-grepとしてパッケージ化されることもあります)を使用すると、次のようにして、特定の文字列を含むパスを見つけることができます。
ack -g somestring

しかし、ファイル名に「somestring」が含まれているファイルのみが必要な場合はどうなりますか?

27
Suan

findユーティリティを使用できます。このようなもの:

find /path/to/look/in -name '*somestring*' -print

一部のシステムでは、パスを省略すると、現在のディレクトリが使用されます。他のシステムでは、それを省略することはできません。代わりに、現在のディレクトリに.を使用してください。

また、他の多くのオプションについては、man findをお読みください。

23
dmedvinsky

私はfindが進むべき道であることに同意しますが、ackで簡単にそれを行うこともできます:

ack -f | ack "string"

ここで、「ack -f」は、検索するすべてのファイルを再帰的にリストします。それを2番目のackコマンドにパイプして、それを検索します。 ack -fには、引数がなくてもバイナリとディレクトリをスキップできるという利点があります。多くの場合、「find」コマンドは、はるかに短い「ack」コマンドに置き換えることができます。

45
user2141650

ackを使用して、ベース名にsomestringが含まれるすべてのファイルを検索する場合は、正規表現に[^/]*$を追加するだけです。

ack -g somestring[^/]*$

残念ながら、--colorsomestringからファイル名の末尾までの一致を表示します。ただし、ackを使用して要求したことを実行することは可能です。

7

まだコメントできません。さもないと、上記の@dmedvinskyの回答にこれを追加します。 .svnファイルを除外するために、彼のアプローチを@whaleyの 別の質問への回答 と組み合わせることができます。

find /path/to/look/in -not -iwholename '*.svn*' -name '*somestring*' -print
0
tony_tiger