OpenWindows ユーザーズガイド (上級編)

ファイル名の検索 (find)

find コマンドを使うと、指定した条件に合致するファイル名の検索を、特定のディレクトリから開始できます。たとえば、特定のパターンに一致するファイル名や一定の期間内に変更されたファイル名などを検索できます。

他の大部分のコマンドとは違って、find のオプションはいくつかの文字からなり、コマンド行ではオプションより前に、検索を開始するディレクトリ名を指定する必要があります。

$ find directory options

directory は検索を開始するディレクトリ名、optionsfind コマンドのオプションです。

各オプションは、ファイルの選択基準を指定します。選択されるファイルは、すべての基準を満たしている必要があります。したがって、指定するオプションの数が多くなるほど、選択されるファイルの範囲は狭くなります。-print オプションを指定すると、検索結果が表示されます。

find コマンドで -name filename オプションを指定すると、filename に一致するファイルだけが選択されます。この filename は、フルパス名のファイルの一番右側の要素と見なされます。たとえば、/usr/lib/calendar の一番右側の要素は calendar です。通常、フルパス名中のこの要素は、ファイルのベース名と呼ばれます。

たとえば、カレントディレクトリとそのサブディレクトリ内で s で終わるファイルを検索する場合は、次のように入力します。

$ find . -name '*s' -print
./programs
./programs/graphics
./programs/graphics/gks
./src/gks
$

find コマンドでは次のオプションを使えます。

¥(options¥) のように、エスケープされた括弧でオプションを囲むことによって、検索条件の優先度を指定できます。エスケープされた括弧内では、各オプションの間に -o フラグを挿入して、両方のカテゴリではなく、どちらか一方のカテゴリに分類されたファイルを選択するよう find に指定できます。

$ find . ¥( -name AAA -o -name BBB ¥) -print
./AAA
./BBB

オプションの前にエスケープされた感嘆符を付けることによって、オプションの意味を逆にできます。この場合、find はオプションで指定された条件に合致しないファイルを選択します。

$ find . ¥!-name BBB -print
./AAA

また次のオプションを使うと、find で検索されたファイルに対して特定のコマンドを実行できます。

-exec command '{}' ¥;

このオプションは、エスケープされたセミコロン (¥;) で終了します。引用符付きの大括弧 ('{}') は、find によって選択されたファイル名で置き換えられます。

たとえば、find コマンドを利用すれば一時的な作業用ファイルを自動的に削除できます。一定の規則に従って一時ファイル名を指定しておくことにより、その存在場所にかかわらず、find を使ってそれらの一時ファイルを検索した上で破棄できます。たとえば、一時ファイル名を junk または dummy と指定した場合は、次のコマンドによってそれらの検索と削除を実行できます。

$ find . ¥( -name junk -o -name dummy ¥) -exec rm '{}' ¥;

find コマンドについての詳細は、『SunOS リファレンスマニュアル (1): ユーザーコマンド』を参照してください。