find - ファイルを検索する

構文

find [-H | -L | -P] [-Xdx] [-f file] file ... [expression]

説明

find ユーティリティーは、指定された各 file に対するディレクトリー・ツリーを再帰的に下降しながら、ツリー内の各ファイルへの expression (以下に示す「プライマリー」と「オペランド」から構成される) を評価します。

オプション

-H
コマンド行上のシンボリック・リンクに従って操作が実行されます。 ツリー走査中に検出されたシンボリック・リンクは対象にはなりません。 コマンド行に指定された各シンボリック・リンクについては、リンクによって参照されるファイルに関する情報とファイル・タイプが戻されます。 参照されているファイルが存在しない場合は、リンク自体のファイル情報およびタイプが戻されます。
-L
コマンド行のシンボリック・リンクとツリー走査中に発見されたシンボリック・リンクの両方に従って操作が実行されます。 コマンド行に指定された各シンボリック・リンクごとに、リンクで参照されるファイルに関する情報とファイル・タイプが戻されます。 参照されているファイルが存在しない場合は、リンク自体のファイル情報およびタイプが戻されます。
-P
シンボリック・リンクには従いません。 各シンボリック・リンクについては、リンク自体のファイル情報とファイル・タイプが戻されます。
-X
findxargs と共に安全に使用できるように変更します。 xargs で使用される区切り文字のどれかがファイル名に入っている場合は、標準エラーに診断メッセージが表示され、そのファイルはスキップされます。 区切り文字には、一重引用符 (') と二重引用符 (")、円記号 (¥)、スペース文字、タブ文字、および改行文字があります。
-d
find の走査は下位レベル優先で行われます。 ディレクトリーは後順で走査され、ディレクトリー内のすべての項目の処理の終了後、ディレクトリー自体が処理されます。 デフォルト設定では、 find は、ディレクトリーを先順で (それぞれの内容より先に) 走査します。 デフォルト値は横方向優先の走査ではないので注意してください。
-f
find を使って走査するファイル階層を指定します。 ファイル階層は、オプション群の直後のオペランドとして指定することもできます。
-x
find は、下降の起点になるファイルとは装置番号が異なるディレクトリーの中は検索しません。

プライマリー

-atime n
ファイルに最後にアクセスした時刻と find が開始した時刻との時間差を 24 時間単位で切り上げた値が、24 時間の n 倍である場合は、真になります。
-ctime n
ファイル状況情報を最後に変更した時刻と find が開始された時刻との時間差を 24 時間単位で切り上げた値が、24 時間の n 倍である場合は、真になります。
-exec utility [argument ...] ;
utility に指定したプログラムが戻り状況として値 0 を戻した場合は、真になります。 指定したユーティリティーには、オプションの引数を渡すことができます。 式はセミコロン (;) で終わっていなければなりません。 ユーティリティー名または引数のどこかにストリング {} がある場合は、現行ファイルのパス名で置き換えられます。 ユーティリティーは find の実行が開始されたディレクトリーから実行されます。 セミコロンもシェルに対して特殊文字であるので、 引数として find に渡されるようにセミコロンをエスケープすることが必要な場合があります。
-group gname
ファイルがグループ gname に属している場合に、真になります。 gname が数値であり、それに該当するグループ名がない場合は、gname はグループ ID と見なされます。
-inum n
ファイルの inode 番号が n の場合に、真になります。
-links n
ファイルのリンク数が n 個の場合には、真になります。
-ls
このプライマリーは、常に真として評価されます。 標準出力に書き出される現行ファイル情報は以下のとおりです。
  • inode 番号
  • サイズ (KB)
  • ファイル許可
  • ハード・リンク数
  • 所有者
  • グループ
  • サイズ (バイト)
  • 最後の変更時刻
  • パス名

ファイルがブロック特殊ファイルまたは文字特殊ファイルである場合は、バイト単位のサイズではなく、メジャー番号とマイナー番号が表示されます。 ファイルがシンボリック・リンクである場合は、リンク先ファイルのパス名の前に `->' が表示されます。

-mtime n
ファイルの最後の変更時刻と find が開始された時刻との時間差を 24 時間単位で切り上げた値が 24 時間の n 倍である場合は、真になります。
-ok utility [argument...] ;
-ok プライマリーは、find が標準エラーにメッセージを出力しその応答を読み取ることによって、utility 実行の承認をユーザーに要求することを除いて、-exec と同じです。 応答が現行ロケールにおける YES 応答の先頭文字以外である場合は、utility は実行されず、ok 式の値は偽になります。
-name pattern
評価対象のパス名の最後の構成要素が pattern に一致した場合は、真になります。 特殊シェル・パターン照合文字 ([、]、*、および ?) を pattern の一部として使用できます。 エスケープ文字である円記号 (¥) を付けてこれらの文字を指定すれば、本来の文字として明示指定して照合することができます。
-newer file
現行ファイルの最後の変更時刻が file の変更時刻よりも新しい場合に、真になります。
-nouser
ファイルが不明なユーザーに属している場合に、真になります。
-nogroup
ファイルが不明なグループに属している場合に、真になります。
-path pattern
評価対象のパス名が pattern に一致した場合に、真になります。 特殊シェル・パターン照合文字 ([、]、*、および ?) を pattern の一部として使用できます。 エスケープ文字である円記号 (¥) を付けてこれらの文字を指定すれば、本来の文字として明示指定して照合することができます。 スラッシュ (/) は通常の文字と見なされるので、明示指定して照合する必要はありません。
-perm [-]mode
mode は記号でも chmod コマンドでサポートされる 8 進数形式でも構いません。 mode が記号の場合、開始値は 0 と見なされ、プロセス・ファイル・モード作成マスクに関係なく、 許可を設定またはクリアします。 mode が 8 進数の場合は、ファイルのモード・ビット 00777 (S_IRWXU | S_IRWXG | S_IRWXO) だけが比較に使用されます。 mode の前にダッシュ (-) が付いている場合は、少なくともモード内のすべてのビットがファイルのモード・ビット内で設定されているときに、このプライマリーは真として評価されます。 mode の前にダッシュが付いていない場合は、mode 内のビットがファイルのモード・ビットと一致しているときに、このプライマリーは真として評価されます。 シンボリック・モードの最初の文字は、ダッシュ (-) であってはならないという点に注意してください。
-print
このプライマリーは、常に真として評価されます。 現行ファイルのパス名がこのプライマリーによって標準出力に表示されます。 -exec-ls-ok のどれも指定されていない場合、式はユーザー指定の式に追加されます。
-prune
このプライマリーは、常に真として評価されます。 これは、find が現行ファイルの中まで下降しないようにします。 -d オプションを指定した場合は、-prune プライマリーは無効になることに注意してください。
-size n[c]
512 バイト・ブロック単位に切り上げたファイル・サイズが n の場合に、真になります。 n の後に c が続く場合は、ファイル・サイズが n バイトの場合に、このプライマリーは真になります。
-type t
ファイルが指定したタイプの場合に、真になります。 可能なファイル・タイプは次のとおりです。
  • b ブロック特殊
  • c 文字特殊
  • d ディレクトリー
  • f 正規ファイル
  • l シンボリック・リンク
  • p FIFO
  • s ソケット
-user uname
ファイルがユーザー uname に属している場合に、真になります。 uname が数値であり、それに該当するユーザー名がない場合には、uname はユーザー ID と見なされます。

数値引数をとるすべてのプライマリーは、前に正符号 (+) または負符号 (-) を付けることができます。 先行正符号は「n より大」を意味し、先行負符号は「n より小」を意味します。どちらも「n に等しい」の意味にはなりません。

演算子

プライマリーは、次の演算子と組み合わせて使用できます。 演算子は、優先順位の高いものから順に列記してあります。

(expression)
これは、括弧で囲まれた式が真として評価された場合に、真になります。
!expression
これは単項 NOT 演算子です。 式が偽の場合に、真と評価されます。
expression -and expression
-and 演算子は論理 AND 演算子です。 この演算子は、2 つの式を並置すれば暗黙に指定されるので、明示的に指定しなくても構いません。 式は、両方の式が真である場合に、真と評価されます。 第 1 の式が偽である場合は、第 2 の式は評価されません。
expression -or expression
-or 演算子は論理 OR 演算子です。 式は、第 1 または第 2 のいずれかの式が真であれば、真と評価されます。 第 1 の式が真である場合は、第 2 の式は評価されません。

すべてのオペランドおよびプライマリーは、find ユーティリティーに対して個別の引数である必要があります。 それ自身が引数をとるプライマリーでは、 各引数がそれぞれ find にとって別個の引数であるものと見なされます。

find で使用される特殊文字は、多くのシェル・コマンドにとっても特殊文字です。 特に、*、 [、 ]、 ?、(、)、!、および ; の各文字は、シェルからエスケープしておくことが必要な場合があります。

終了状況

  1. ディレクトリー /project/java/class から始めて、すべての *.class ファイルを検索する場合 :
    find /project/java/class -name '*.class'
  2. ディレクトリー /project/java/code から始めて、ストリング import java.awt; を含むすべての *.java ファイルを検索する場合 :
    find /project/java/code -name '*.java' -exec grep 'import java.awt;' {} ¥;
  3. ディレクトリー /project/java/class から始めて、すべての *.class ファイルを検索し、 ファイルを除去する場合 :
    find /project/java/class -name '*.class' -exec rm {} ¥;
  4. ディレクトリー /project から始めて、ユーザー abbey に属するすべてのファイルを検索する場合 :
    find /project -user abbey
関連概念
file - ファイル・タイプを判別する
関連タスク
xargs - 引数リストを作成してユーティリティーを起動する
chmod - ファイル・モードを変更する