find コマンドを使うと、指定した条件に合致するファイル名の検索を、特定のディレクトリから開始できます。たとえば、特定のパターンに一致するファイル名や一定の期間内に変更されたファイル名などを検索できます。
ほかの大部分のコマンドとは違って、find のオプションはいくつかの文字からなり、コマンド行ではオプションより前に、検索を開始するディレクトリ名を指定する必要があります。
$ find directory options |
directory は検索を開始するディレクトリの名前、options は find コマンドのオプションです。
各オプションは、ファイルの選択基準を指定します。選択されるファイルは、すべての基準を満たしている必要があります。指定するオプションの数が多くなるほど、選択されるファイルの範囲は狭くなります-print オプションを指定すると、検索結果が表示されます。
-name filename オプションを指定すると、filename に一致するファイルだけが選択されます。この filename は、絶対パス名のファイルの一番右側の要素と見なされます。たとえば、/usr/bin/calendar の一番右側の要素は calendar です。通常、絶対パス名中のこの要素は、ファイルのベース名と呼ばれます。
たとえば、現在のディレクトリとそのサブディレクトリ内で、文字 s で終わるファイルを検索するには、次のように入力します。
$ find . -name '*s' -print ./programs ./programs/graphics ./programs/graphics/gks ./src/gks $ |
次の表は、find コマンドのその他のオプションを示しています。
表 3–1 find オプション
オプション |
説明 |
---|---|
-name filename |
絶対パス名の一番右側の要素 (ベース名) が filename に一致するファイルを選択します。filename にファイル名の置換パターン (正規表現) が含まれる場合は、filename を単一引用符 (`) で囲みます。 |
userid が所有しているファイルを選択します。userid はログイン名、ユーザ ID 番号のどちらでもかまいません。 |
|
group に属するファイルを選択します。 |
|
n 日前に変更されたファイルを選択します。 |
|
checkfile よりあとに変更されたファイルを選択します。
|
\(options\) のように、エスケープされた括弧でオプションを囲むことによって、オプションの優先度を指定できます。エスケープされた括弧内では、各オプションの間に -o フラグを挿入して、両方のカテゴリではなく、どちらか一方のカテゴリに分類されたファイルを選択するよう find に指定できます。
$ find . \( -name AAA -o -name BBB \) -print ./AAA ./BBB |
上記の例では、find コマンドは . ディレクトリ内で AAA というすべてのファイル探し、続いて BBB というすべてのファイルを探し、そのあとで両方の検索結果を表示します。
オプションの前にエスケープされた感嘆符を付けることによって、オプションの意味を逆にすることができます。この場合、find はオプションで指定された条件に合致しないファイルを選択します。
$ find . \!-name BBB -print ./AAA |
また、次のオプションを使用すると、find で検索されたファイルに対してコマンドを実行することもできます。
-exec command '{}' \;
このオプションは、エスケープされたセミコロン (\;) で終了します。引用符付きの大括弧 ('{}') は、find によって選択されたファイル名で置き換えられます。
find コマンドを利用すれば一時的な作業用ファイルを自動的に削除できます。一定の規則に従って一時ファイル名を指定しておくことにより、その存在場所にかかわらず、find を使ってそれらの一時ファイルを検索した上で破棄できます。たとえば、一時ファイル名を junk または dummy と指定した場合は、次のコマンドによってそれらの検索と削除を実行できます。
$ find . \( -name junk -o -name dummy \) -exec rm '{}' \; |