より一般的なCLIインターフェースを備えた代替のfind
プログラムはありますか? find
は、他のほとんどのユーティリティとはかなり異なる方法で機能し、パラメーターを期待します。
明確化:POSIX(または少なくともGNU)のコマンドラインの推奨事項のように機能し、感じられるコマンドラインインターフェースを備えたfindとほぼ同じ機能を持つプログラムを探しています。
これはよくある誤解です。
オプションの構文に従います。オプションと式のプライマリを混同しているだけです:
find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
[cmd][--> options <--] [--> arg0..argN <--]
代替はロケートです。ただし、findは、フィルターとアクションのオプションの豊富なセットを提供するため、独自の式構文を実装しています。それが冗長であるという理由だけで、同じことを行うことができる代替はありません。
これは、依存しているfind
の正確な機能に依存します。 (主に)検索機能である場合、一部のシェルは再帰的なグロブをサポートします。例:zsh
:
_% find . -name \*c
./a/b/foo.c
./a/bar.c
./baz.c
inoshiro% ls *.c
baz.c
% ls **/*.c
a/bar.c a/b/foo.c baz.c
_
Zshは glob qualifiers (_man zshexpn
_の終わり近くを見る)を介して、はるかに多くの検索のような可能性を持っています。例えば:
ls -l **/*(.)
≈_find -type f -ls
_ls *(m-2u:$USER:)
≈_find -mtime -2 -user $USER
_
Bash 4には_**/
_(_shopt -s globstar
_で有効にする必要があります)もありますが、グロブ修飾子のようなものはありません。
locate
を見てみましょう。ファイルのデータベースを調べ、指定したものと一致するパス名をすばやく出力します。
kevin@box:~$ locate odg
/home/kevin/Documents/final.odg
/usr/share/doc/packages/sysconfig/netconfig.odg
/usr/share/gimp/2.0/help/en/gimp-tool-dodge-burn.html
....
kevin@box:~$ locate .odg
/home/kevin/Documents/final.odg
/usr/share/doc/packages/sysconfig/netconfig.odg
kevin@box:~$
ご覧のとおり、これはサブテキストの一致です。odg
を指定すると、dに一致しますodge。しかし、あなたがそれを与えれば.odg
、そうではありません。
ただし、欠点が1つあります。データベースが必要です。このデータベースは、状況が変化したときに更新する必要があります。しかし、私のFedora 13インストールでは、これを毎日のcrontabに入れています。
何を探しているの?通常、ソースコードファイルを検索する場合は、 ack
を参照してください。これは基本的にソースコード検索ツールですが、ackの-f
スイッチは、特定のファイルタイプに一致するファイルを検索します。
たとえば、ディレクトリ内のすべてのPerlファイルを検索する場合は、たとえば次のようにします。
ack -f --Perl
Ackが認識するファイルタイプが気に入らない場合は、~/.ackrc
に独自のファイルタイプを追加できます。
ackはfind
のような汎用ファイルファインダーではありませんが、ソースコードで作業している場合は非常に便利です。