find(1) FreeBSD 一般コマンドマニュアル

find

前のページ 上に戻る 次のページ

find




解説

     find は、 pathname に対してディレクトリツリーを再帰的に下って、ツリー上の
     各ファイルについて expression (後に示す ``プライマリ'' と ``演算子'' から
     構成されます) で指定された処理を実行します。

     オプションとしては以下のものがあります:

     -E      -regex および -iregex のオプションの後の正規表現を、基本正規表現
             (BRE) の代りに拡張 (最近の) 正規表現として解釈します。
             re_format(7) マニュアルページは、両方のフォーマットを完全に解説し
             ています。

     -H      file で指定したファイルがシンボリックリンクファイルだった場合、シ
             ンボリックリンク自体ではなく、リンク先のファイルに関してファイル
             情報とファイルタイプ ( stat(2) 参照) を使って expression の処理を
             するように指定します。もしリンク先のファイルがなければ、シンボ
             リックリンク自体を処理の対象とします。コマンドラインからの file
             で直接指定されたのではなく、ディレクトリツリー上で見つかったシン
             ボリックリンクファイルに関しては、シンボリックリンク自体を処理の
             対象とします。

     -L      file で指定したファイルがシンボリックリンクファイルだった場合、シ
             ンボリックリンク自体ではなく、リンク先のファイルに関してファイル
             情報とファイルタイプ ( stat(2) 参照) を使って expression の処理を
             するように指定します。もしリンク先のファイルがなければ、シンボ
             リックリンク自体を処理の対象とします。

     -P      シンボリックリンク自体に関してファイル情報とファイルタイプ (
             stat(2) 参照) を使って expression の処理をするように指定します。
             これがデフォルトです。

     -X      xargs(1) と組み合わせて使うときのため、より安全に動作するようにし
             ます。もし xargs(1) によりデリミタ文字 (シングルクォート (`` '
             '') 、ダブルクォート (`` " '') 、バックスラッシュ (``\'') 、スペ
             ース、タブ、改行) が含まれるファイル名が使われた場合、診断メッセ
             ージを標準エラー出力に表示して、そのファイル名をスキップします。

     -d      ファイルに対する処理順序を深さ優先の探索方式にします。すなわち、
             ディレクトリ自体に対する処理を行う前に、ディレクトリ内の個々の
             ファイルに対して処理を実行します。デフォルトでは、ディレクトリは
             最初に処理されます。 (デフォルトの方式は幅優先探索方式では ないで
             す。)

     -f file
             明示的にファイルを指定します。ファイル名の先頭が ``-'' で始まって
             いたり、あとで述べる expression の指定と混同してしまうようなファ
             イル名を指定したりするときに使用します。 (ファイルはオプション直
             後のオペランドとしても指定可能です。)

     -s      -s オプションは、辞書編集上の順に、すなわち各ディレクトリ内におい
             てアルファベット順に、ファイル階層を find に辿らせます。注: `find

     -atime n
             最後にファイルがアクセスされた時刻と、 find を起動した時刻との差
             (24 時間単位で切り上げます) が n 日であれば、真とします。

     -cnewer file
             -newercm と同じです。

     -ctime n
             最後にファイルのステータスが変更された時刻と、 find を起動した時
             刻の差 (24 時間単位で切り上げます) が n 日であれば、真とします。

     -delete
             見付けたファイルやディレクトリを消去します。常に真を返します。現
             在の作業ディレクトリから find は再帰的にディレクトリツリーを下り
             ます。セキュリティ上の理由から、 ``.'' からの相対パス名に ``/''
             文字を含むファイル名のファイルを消去しようとはしません。このオプ
             ションにより暗示的に深さ優先の処理が指定されます。

     -empty  現在のファイルまたはディレクトリが空の場合、真となります。

     -exec utility [argument ...];
             utility で指定した名前のプログラムを実行し、終了コードが 0 の場
             合、真とします。 argument は、utility への引数として渡されます。
             この指定は、最後に必ずセミコロン (``;'') をつけてください。 util-
             ity もしくは argument の指定のなかで ``{}'' が使われていた場合
             は、その部分が、現在 find が対象としているファイルのパス名に置き
             換えられます。ただし、 utility が実行されるときのカレントディレク
             トリは、 find が起動されたディレクトリのままです。 utilityarguments は、シェルのパターンと構造の更なる展開対象とはなりませ
             ん。

     -execdir utility [argument ...];
             -execdir プライマリは -exec プライマリと同様ですが、 utility が現
             在のファイルを持つディレクトリにおいて実行される点が異なります。
             文字列 ``{}'' に対して置換されるファイル名は適切ではありません。

     -flags [-flags]
             このプライマリは、ファイルのフラグが指定された flags と完全に同じ
             に設定されている場合 (ダッシュ (``-'') が前に付かない場合) か、指
             定されたフラグにマッチする場合 (ダッシュが前に付く場合) に真にな
             ります。 flags はシンボル名 ( chflags(1) 参照) で指定可能です。こ
             れは、設定されたフラグの指定のみを許す -perm とは違うことに注意し
             てください。

     -fstype type
             対象ファイルが格納されているファイルシステムのタイプが、 type で
             指定されたものである場合に真となります。 sysctl(8) コマンドを使用
             して、システム上で利用可能なファイルシステムタイプを調べることが
             できます:

                   sysctl vfs

             ファイルの i ノード番号が n なら、真になります。

     -ipath pattern
             -path に似ていますが、大文字小文字を区別せずにマッチします。

     -iregex pattern
             -regex に似ていますが、大文字小文字を区別せずにマッチします。

     -links n
             ファイルのリンク数が n なら、真になります。

     -ls     このプライマリは常に真になります。対象となっているファイルの情報
             を標準出力に出力します。出力する内容は i ノード番号、 512 バイト
             ブロックでのファイルの大きさ、ファイルのパーミッション、ハードリ
             ンクの数、所有者、グループ、バイトで表したファイルの大きさ、最後
             にファイルが修正された時刻、パス名です。ファイルがブロック型もし
             くはキャラクタ型の特殊ファイルならば、バイトで表したファイルの大
             きさの代わりにメジャー番号とマイナー番号を出力します。ファイルが
             シンボリックリンクならば、 ``->'' の後にリンク先のファイルのパス
             名を表示します。フォーマットは ls -dgils の出力結果と同じです。

     -maxdepth n
             現在のファイルのツリーにおける深さが n 以下である場合、真になりま
             す。

     -mindepth n
             現在のファイルのツリーにおける深さが n 以上である場合、真になりま
             す。

     -mmin n
             最後にファイルが修正された時刻と、 find を起動した時刻との差 (1
             分単位で切り上げます) が n 分であれば、真とします。

     -mnewer file
             -newer と同じです。

     -mtime n
             最後にファイルが修正された時刻と、 find を起動した時刻との差(24
             時間単位で切り上げます)が n 日であれば、真とします。

     -name pattern
             対象ファイルのパス名の最後のファイル名部分が pattern で指定したも
             のとマッチするかどうかを調べ、マッチした場合は真になります。
             pattern としては、シェルで使われるパターンマッチ指定 ( ``['',
             ``]'', ``*'', ``?'') を使用することができます。これらの文字はバッ
             クスラッシュ (``\'') を前において、パターンマッチ指定ではなく文字
             として扱う事を明示することができます。

     -newer file
             対象ファイルの修正日付が、 file で指定したファイルのものより新し
             い場合は、真になります。

     -ok utility [argument ...];
             -ok プライマリは exec とほぼ同じですが、 utility を実行するかどう
             かの確認をユーザに求め、端末にメッセージを出力します。 ``y'' 以外
             の返答をした場合は、コマンドは実行されず、 -ok 式の値は偽になりま
             す。

     -okdir utility [argument ...];
             -okdir プライマリは、 -execdir プライマリと同様ですが、 -ok プラ
             イマリの解説に該当する部分が異なります。

     -path pattern
             対象ファイルのパス名が、 pattern で指定したものとマッチするかどう
             かを調べます、マッチした場合は真になります。 pattern としては、
             シェルで使われるパターンマッチ指定 ( ``['', ``]'', ``*'', ``?'')
             を使用することができます。これらの文字はバックスラッシュ (``\'')
             を前において、パターンマッチ指定ではなく文字として扱う事を明示す
             ることができます。 (``/'') は、そのままパスのディレクトリの区切り
             にマッチします。

     -perm [-]mode
             ファイルのモードを、 mode と比較します。 mode は、シンボル形式 (
             chmod(1) 参照) もしくは 8 進数形式で指定します。シンボル形式の場
             合は、 00000 から開始してパーミッションのセットとクリアを行いま
             す。 (プロセスのファイル生成マスクとは無関係です。) 8 進数形式の
             場合は、ファイルのモードビットのうち、07777 (S_ISUID | S_ISGID |
             S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) の部分が比較対象になりま
             す。 mode の最初にダッシュ (``-'') を指定した場合は、 mode でセッ
             トされているすべてのビットがファイルのモードでもセットされていれ
             ば、このプライマリは真となります。 mode の最初にプラス (``+'') を
             指定した場合は、 mode でセットされているビットのどれかがファイル
             のモードでもセットされていれば、このプライマリは真となります。ど
             ちらでもない場合、ファイルのモードと mode が完全に一致した場合に
             のみ真となります。なお、シンボル形式でモード指定をする場合は、少
             なくとも最初がダッシュ (``-'') にならないようにする必要がありま
             す。

     -print  このプライマリは常に真になります。対象となっているファイルのパス
             名を標準出力に出力して改行します。 -exec, -ls, -print0, -ok のど
             のプライマリも指定されなかった場合は、与えられた式 given expres-
             sion は ( given expression ) -print で置き換えられます。

     -print0
             -print とほぼ同じですが、標準出力に対象となっているファイルのパス
             名を出力したあと、改行ではなく、 ASCII NUL 文字 (文字コード 0) を
             出力します。

     -prune  このプライマリは常に真になります。対象となっているファイル配下の
             ディレクトリに下りないようにします。 -d オプションが指定されてい
             る場合は、 -prune の指定は無効になります。

     -regex pattern
             ファイルのパス全体が、正規表現 pattern にマッチする場合、真になり
             b       ブロック型特殊ファイル
             c       キャラクタ型特殊ファイル
             d       ディレクトリ
             f       普通のファイル
             l       シンボリックリンク
             p       FIFO
             s       ソケット

     -user uname
             ファイルの所有者が、 uname で指定されたユーザと一致すれば真になり
             ます。もし uname が数字で、そのようなユーザ名がなければ、ユーザ
             ID が指定されたものとして扱います。

     なお、数字を引数にとるプライマリは、数字の前にプラス (``+'') およびマイナ
     ス (``-'') をつけることができます。それぞれ ``n より大'' および ``n より
     小'' の意味になり、 ``正確に n'' という意味ではなくなります。


演算子

     以下の演算子を使って、プライマリを組み合わせることができます。演算子は優
     先度が下がる順番で示されています。

     ( expression )  もし、括弧内の expression が真なら、真になります。

     ! expression    単項否定演算子 ( NOT ) です。 expression が偽なら、真とな
                     ります。

     expression1 -and expression2
     expression1 expression2
                     論理積 ( AND ) 演算子です。 expression1expression2 の
                     両方とも真のとき、真になります。もし expression1 が偽な
                     ら、 expression2 は実行されません。 -and を書かずに、単に
                     2 つの expression を並べて

                     expression1 expression2

                     と書いても同じです。

     expression1 -or expression2
                     論理和 ( OR ) 演算子です。 expression1expression2 の
                     どちらか一方でも真であれば、真になります。もし
                     expression1 が真なら、 expression2 は実行されません。


使用例

     コマンドラインからのタイプ例です。

     find / \! -name "*.c" -print
             ファイル名の終わりが .c でない全ファイルを表示します。

     find / -newer ttt -user wnj -print
             ttt というファイルより新しく所有者が ``wnj'' である全ファイルを表
             示します。



規格

     find ユーティリティの文法は IEEE Std 1003.2 (``POSIX.2'') の仕様で決めら
     れた文法のスーパセットです。全 1 文字オプションと -iname, -inum, -print0,
     -delete, -ls, -regex のプライマリは IEEE Std 1003.2 (``POSIX.2'') の拡張
     です。

     昔は -d, -h, -x のオプションはそれぞれ -depth, -follow, -xdev のプライマ
     リを用いて実装されていました。これらのプライマリは常に真に評価されていま
     した。これらのプライマリは探索が始まる前に効果を与える本当のグローバル変
     数であったので、いくつかの合法的な expression が予期しない結果となりまし
     た。一例として -print -o -depth の expression があります。 -print が常に
     真に評価されるため標準の評価の順番では -depth は決して評価されないはずで
     すが、そうではありませんでした。

     演算子の -or-o として実装されていました。演算子の -and-a として実
     装されていました。

     昔の実装では exec-ok のプライマリでは、 tility 名やその引数中におい
     て、空白以外の文字が前後に続く ``{}'' を置き換えませんでした。このバー
     ジョンでは utility 名やその引数のどの場所に ``{}'' が現れても置き換えま
     す。

     -E オプションは、 grep(1) および sed(1) の類推から実装されました。


バグ

     find によって使われる特殊文字は多くのシェルにとっても特殊文字です。特に
     ``*'', ``['', ``]'', ``?'', ``('', ``)'', ``!'', ``\'', ``;'' は、シェル
     からエスケープされなくてはならないでしょう。

     オプションとファイル名との間およびファイル名と expression との間を区切る
     デリミタが存在しませんので、ファイル名にオプションと間違えるようなもの (
     -xdev のようなもの) や、 expression と間違えるようなもの ( ! のようなも
     の) を指定することは難しいです。このようなファイル名を指定する場合は -f
     オプションを使うか、 getopt(3) で使われるオプション指定の終了記号 ``--''
     を使用します。

     -delete プライマリは、ファイルシステムツリーの検索順序に影響する他のオプ
     ションとは十分には連係しません。


歴史

     find コマンドは Version 1 AT&T UNIX から登場しました。

FreeBSD 4.4                       May 3, 2001                      FreeBSD 4.4

ABELNET VPSサービス