findが検索するディレクトリと検索方法を制御する方法を示します。次の2つのオプションを使うと、ディレクトリツリーの特定の深さの層を処理できます。
コマンド行引数で指定した場所から、最大levels階層までディレクトリを下ります。値は非負整数です。「-maxdepth 0」は、コマンド行引数だけにテストとアクションを適用することを意味します。
$ mkdir -p dir/d1/d2/d3/d4/d5/d6 $ find dir -maxdepth 1 dir dir/d1 $ find dir -mindepth 5 dir/d1/d2/d3/d4/d5 dir/d1/d2/d3/d4/d5/d6 $ find dir -mindepth 2 -maxdepth 4 dir/d1/d2 dir/d1/d2/d3 dir/d1/d2/d3/d4
levels未満の階層では、テストもアクションも適用しません。値は非負整数です。「-mindepth 1」は、コマンド行引数を除くすべてのファイルを処理することを意味します。
例については「-maxdepth」を参照してください。
各ディレクトリそのものより先に、その内容を処理します。cpioやtarでアーカイブするファイルの一覧を作るときに適しています。ディレクトリの所有者に書き込み権限がなくても、権限をその内容より後に復元するため、内容をアーカイブから復元できます。
Mac OS X、FreeBSD、OpenBSDとの互換性のために用意された、「-depth」の非推奨の別名です。「-depth」はPOSIXの機能なので、そちらを使うほうがよいでしょう。
ファイルがディレクトリである場合、その内部へ進みません。結果は真になります。たとえば、ディレクトリsrc/emacsとその配下のすべてのファイルとディレクトリを省き、それ以外に見つかったものの名前を表示するには、次のようにします。
find . -wholename './src/emacs' -prune -o -print
上のコマンドは、結果の一覧に./src/emacsを表示しません。ただし、これは「-prune」アクションの効果ではありません。このアクションは、その先へ進むのを止めるだけで、項目そのものを無視することは保証しません。表示されないのは「-o」によるものです。./src/emacsについてはor条件の左辺が成功したため、右辺の「-print」を評価する必要がないからです。そのディレクトリ名も表示したい場合は、「-print」アクションを追加するか、
find . -wholename './src/emacs' -prune -print -o -print
コンマ演算子を使えます。
find . -wholename './src/emacs' -prune , -print
「-depth」が有効な場合、いずれにしてもサブディレクトリはすでに訪問済みです。そのため、この場合「-prune」には効果がありません。
「-delete」は「-depth」の動作も有効にするため、「-prune」と「-delete」を組み合わせると、意図した以上のファイルを削除する可能性があります。
直ちに終了します。エラーがなければ終了値はゼロです。「-prune」が対象ディレクトリの内容だけに適用されるのに対し、「-quit」はfindを直ちに止めるため、「-prune」とは異なります。実行中の子プロセスを残すことはありません。「-exec
... {} +」や「-execdir ... \+」で組み立てたコマンド行は、終了前に実行します。「-quit」の実行後は、コマンド行に指定した残りのファイルを処理しません。たとえば、「find /tmp/foo
/tmp/bar -print -quit」は「/tmp/foo」だけを表示します。「-quit」のよくある用途は、目的のものが見つかったらファイルシステムの検索を止めることです。たとえば、1つだけファイルを見つけたい場合は、次のようにします。
find / -name needle -print -quit
ディレクトリのサブディレクトリ数が、ハードリンク数より2つ少ないと仮定する最適化を行いません。このオプションは、CD-ROM、MS-DOS、AFSのボリュームマウントポイントなど、Unixのディレクトリリンクの慣習に従わないファイルシステムを検索するときに必要です。通常のUnixファイルシステムでは、各ディレクトリに、その名前と.エントリという、少なくとも2つのハードリンクがあります。さらに、各サブディレクトリの..エントリも、そのディレクトリにリンクしています。findがディレクトリを調べるとき、リンク数より2つ少ない数のサブディレクトリをstatで調べ終えると、残りのエントリはディレクトリではないと判断できます。これらはツリーの葉に当たるファイルです。ファイル名だけを調べればよい場合は、statで調べる必要がなくなり、検索速度が大幅に向上します。
ディレクトリから名前を読み取った後、findがstatで調べる前にファイルが消えた場合、エラーメッセージを出しません。このオプションを指定しない場合は、エラーメッセージを出します。
さらに、「-ignore_readdir_race」を指定したfindは、親ディレクトリを読み取った後にファイルが消えた場合の「-delete」アクションのエラーも無視します。エラーの診断メッセージを出さず、「-delete」の戻り値は真になります。
このオプションは、メールキューや一時ディレクトリなど、頻繁に変わる領域を調べるシステムスクリプト、たとえばcronスクリプトで役立ちます。そのようなディレクトリでは、よく起きる状況だからです。findのエラーメッセージをすべて抑制するのは望ましくないため、このオプションで問題に適切に対処できます。ただし、ファイルシステムの一部では有効、別の部分では無効にして検索することはできません。有効にした状態で、コマンド行に指定した開始点のファイルが存在しない場合も、エラーメッセージは出しません。
「-ignore_readdir_race」の効果を打ち消すオプションです。