web-dev-qa-db-ja.com

見つける代わり?

より一般的なCLIインターフェースを備えた代替のfindプログラムはありますか? findは、他のほとんどのユーティリティとはかなり異なる方法で機能し、パラメーターを期待します。

明確化:POSIX(または少なくともGNU)のコマンドラインの推奨事項のように機能し、感じられるコマンドラインインターフェースを備えたfindとほぼ同じ機能を持つプログラムを探しています。

32
Tamás Szelei

これはよくある誤解です。

オプションの構文に従います。オプションと式のプライマリを混同しているだけです:

 find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
 [cmd][-->        options          <--] [--> arg0..argN  <--]

代替はロケートです。ただし、findは、フィルターとアクションのオプションの豊富なセットを提供するため、独自の式構文を実装しています。それが冗長であるという理由だけで、同じことを行うことができる代替はありません。

11
Mel

これは、依存している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_で有効にする必要があります)もありますが、グロブ修飾子のようなものはありません。

10
jmtd

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に入れています。

10
Kevin M

何を探しているの?通常、ソースコードファイルを検索する場合は、 ack を参照してください。これは基本的にソースコード検索ツールですが、ackの-fスイッチは、特定のファイルタイプに一致するファイルを検索します。

たとえば、ディレクトリ内のすべてのPerlファイルを検索する場合は、たとえば次のようにします。

ack -f --Perl

Ackが認識するファイルタイプが気に入らない場合は、~/.ackrcに独自のファイルタイプを追加できます。

ackはfindのような汎用ファイルファインダーではありませんが、ソースコードで作業している場合は非常に便利です。

6
Andy Lester