find コマンド

目的

照合式に一致するファイルを検索します。

構文

find [ -H | -L ] Path ... [ Expression ]

説明

find コマンドは、ディレクトリー・ツリーの中で、指定されたそれぞれの Path パラメーターを再帰的に検索し、ブール式と一致するファイルを探します。 ブール式は、以下のテキストに示す項を使用して記述されます。 find コマンドがディレクトリー構造を上から下へ再帰的に検索している場合は、現在の階層にシンボリック・リンクによってリンクしているディレクトリーを検索しません。 find コマンドからの出力は、Expression パラメーターで指定した項に応じて異なります。

find コマンドは 4.3 BSD 高速検索構文をサポートしません。

フラグ

項目 説明
-H コマンド・ラインで検出されたシンボリック・リンクに対して評価されたファイル情報とファイル・タイプが、リンクで参照されるファイル (リンク自体ではない) のファイル情報とファイル・タイプになります。 参照されるファイルが存在しない場合は、 ファイル情報とファイル・タイプはリンク自体に関するものです。コマンド・ラインにないすべてのシンボリック・リンクに関するファイル情報は、 リンク自体のファイル情報です。
-L シンボリック・リンクに対して評価されたファイル情報とファイル・タイプが、 リンクで参照されるファイル (リンク自体ではない) のファイル情報とファイル・タイプになります。

式の項

ブール式と変数は、find コマンドの検索境界を PathExpression パラメーターの定義に従って記述します。
注: 以下の定義では、n 変数には +n (n より大きい)、-n (n より小さい)、または n (n と等しい) という表記で 10 進整数を指定し、Number 変数には +Number (Number より大きい)、-Number (Number より小さい)、または Number (Number-1 から Number) という表記で 10 進整数を指定します。
項目 説明
¥ (Expression ¥) 括弧で囲まれている式が真であるとき、真となります。
-amin n n の値は、以下のいずれかの値とすることができます。
n
初期設定時間から減算されたファイル・アクセス時間を 60 秒で割った値 (余りは切り捨てる) が n のとき、値は真となります。
-n
初期設定時間から減算されたファイル・アクセス時間を 60 秒で割った値 (余りは切り捨てる) が n より小さいとき、値は真となります。
+n
初期設定時間から減算されたファイル・アクセス時間を 60 秒で割った値 (余りは切り捨てる) が n より大きいとき (UNIX03 の場合は n+1 より大きいとき)、値は真となります。

例えば、-amin 2 は、ファイルが 1 分から 2 分以内にアクセスされていれば、 真です。

注: find コマンドの開始時間以降にアクセスしたファイルは考慮されません。ただし、UNIX03 以外の動作に対して find コマンドを単項 NOT 演算子の中で使用した場合、コマンドの開始時刻以降に変更されたファイルは値 n に到達するまで表示されます。
-atime n n の値は、以下のいずれかの値とすることができます。
n
初期設定時間から減算されたファイル・アクセス時間を 86400 秒で割った値 (余りは切り捨てる) が n のとき、値は真となります。
-n
初期設定時間から減算されたファイル・アクセス時間を 86400 秒で割った値 (余りは切り捨てる) が n より小さいとき、値は真となります。
+n
初期設定時間から減算されたファイル・アクセス時間を 86400 秒で割った値 (余りは切り捨てる) が n より大きいとき (UNIX03 の場合は n+1 より大きいとき)、値は真となります。
注: -atime の定義が変更され、Single UNIX Specification バージョン 3 に準拠するようになりました。以前の動作では、24 時間の n-1 倍から n 倍までの間にファイルがアクセスされたとき、 -atime が真と評価されていました。デフォルトでは、find -atimeUNIX03 より前の働きと同様の働きをします。 UNIX03 の動作を可能にするには、環境変数 XPG_SUS_ENVONXPG_UNIX98OFF に設定します。

このオプションの以前の動作を可能にするには、 XPG_UNIX98 変数を ON に設定します。

find コマンドの開始時間以降にアクセスしたファイルは考慮されません。ただし、UNIX03 以外の動作に対して find コマンドを単項 NOT 演算子の中で使用した場合、コマンドの開始時刻以降に変更されたファイルは値 n に到達するまで表示されます。

-cmin n n の値は、以下のいずれかの値とすることができます。
n
初期設定時間から減算されたファイルの i ノード変更時間を 60 秒で割った値 (余りは切り捨てる) が n のとき、値は真となります。
-n
初期設定時間から減算されたファイルの i ノード変更時間を 60 秒で割った値 (余りは切り捨てる) が n より小さいとき、値は真となります。
+n
初期設定時間から減算されたファイルの i ノード変更時間を 60 秒で割った値 (余りは切り捨てる) が n より大きいとき (UNIX03 の場合は n+1 より大きいとき)、値は真となります。
注: find コマンドの開始時刻より後に変更された i ノードがあるファイルは、考慮されません。ただし、UNIX03 以外の動作に対して find コマンドを単項 NOT 演算子の中で使用した場合、コマンドの開始時刻以降に i ノード変更したファイルは値 n に到達するまで表示されます。
-cpio Device 現行ファイルを指定されたデバイスに cpio コマンド・フォーマットで書き込みます。
-ctime n n の値は、以下のいずれかの値とすることができます。
n
初期設定時間から減算されたファイルの i ノード変更時間を 86400 秒で割った値 (余りは切り捨てる) が n のとき、値は真となります。
-n
初期設定時間から減算されたファイルの i ノード変更時間を 86400 秒で割った値 (余りは切り捨てる) が n より小さいとき、値は真となります。
+n
初期設定時間から減算されたファイルの i ノード変更時間を 86400 秒で割った値 (余りは切り捨てる) が n より大きいとき (UNIX03 の場合は n+1 より大きいとき)、値は真となります。
注: -ctime の定義が変更され、Single UNIX Specification バージョン 3 に準拠するようになりました。ファイルが、24 時間の n-1 倍から n 倍までの間にアクセスされたとき、 -ctime の以前の動作は真となりました。デフォルトでは、find -ctimeUNIX03 より前の働きと同様の働きをします。 UNIX03 の動作を可能にするには、環境変数 XPG_SUS_ENVONXPG_UNIX98OFF に設定します。

このオプションの以前の動作を可能にするには、 XPG_UNIX98 変数を ON に設定します。

find コマンドの開始時間以降に i ノード変更したファイルは考慮されません。ただし、UNIX03 以外の動作に対して find コマンドを単項 NOT 演算子の中で使用した場合、コマンドの開始時刻以降に i ノード変更したファイルは値 n に到達するまで表示されます。

-depth 値は常に真となります。ディレクトリー階層を下位方向に検索していくので、ディレクトリー内のすべてのエントリーが、ディレクトリーそのものよりも先に影響を受けます。 それは、find コマンドを cpio コマンドと一緒に 使用して、書き込み許可を持たないディレクトリー内に含まれているファイルを転送する場合に便利です。
-ea ファイルにアクセス制御リスト (ACL) または拡張属性 (EA) が設定されていれば、値は真と評価されます。
-exec Command 指定したコマンドが実行されて、終了状況として値 0 が戻されるとき、値は真となります。 指定したコマンドの終わりには、引用符で囲んだセミコロン、エスケープされたセミコロン、または正符号を付ける必要があります。 2 つの文字 {} (中括弧) を含む引数の後には、指定したコマンドの終わりを示す正符号を付ける必要があります。コマンド・パラメーター {} (中括弧) は現行パス名に置き換えられます。
-follow シンボリック・リンクおよびハード・リンクが後に続くようにします。
-fstype Type ファイルが属しているファイルシステムが指定されたタイプであるとき、値は真となります。Type 変数の値には jfs (ジャーナル・ファイルシステム)、nfs (ネットワーク・ファイルシステム)、jfs2 (拡張ジャーナル・ファイルシステム)、procfs (proc ファイルシステム)、または namefs (名前ファイルシステム) が入っています。
-group Group ファイルが指定したグループに属するとき、値は真になります。 Group 変数の値が数値で、/etc/group ファイルに 無い場合は、グループ ID と解釈されます。
-inum n ファイルの i ノード番号が n 変数の値と一致するとき、値は真となります。
-links n ファイル内に、指定した数のリンクがあるとき、値は真となります。 リンクについての説明は、ln コマンドを参照してください。
-iregex regular_expression ファイルのパス名全体が正規表現と一致する場合、値は真となります。 このオプションは -regex オプションと似ていますが、突き合わせの際に大/小文字を区別しない点は異なります。
-long -ls と組み合わせて使用すると、各ユーザー名/グループ名を、最初の 8 文字に切り捨てずに、使用可能なすべての文字が印刷されます。
-ls 値は常に真となります。現行パス名を関連する統計と一緒に表示します。 これらの統計には、以下の値が含まれます。
  • i ノード番号
  • KB (1024 バイト) 単位のサイズ
  • 保護モード
  • ハード・リンク数
  • ユーザー
  • グループ
  • バイト単位のサイズ
  • 変更時間

ファイルがスペシャル・ファイルの場合、サイズ・フィールドにはメジャー・デバイス番号とマイナー・デバイス番号が含まれます。 ファイルがシンボリック・リンクの場合、リンク先のファイルのパス名が -> (ハイフン、より大) シンボルに続いて出力されます。 このフォーマットは、ls -filds コマンドのフォーマットと似ていますが、フォーマット化は、ls コマンドを実行せずに内部的に行われます。 このため、ls コマンドの出力結果とは異なる場合があります (保護モードの出力の有無など)。

-mmin n n の値は、以下のいずれかの値とすることができます。
n
初期設定時間から減算されたファイル変更時間を 60 秒で割った値 (余りは切り捨てる) が n のとき、値は真となります。
-n
初期設定時間から減算されたファイル変更時間を 60 秒で割った値 (余りは切り捨てる) が n より小さいとき、値は真となります。
+n
初期設定時間から減算されたファイル変更時間を 60 秒で割った値 (余りは切り捨てる) が n より大きいとき (UNIX03 の場合は n+1 より大きいとき)、値は真となります。
注: find コマンドの開始時間以降に変更したファイルは考慮されません。ただし、UNIX03 以外の動作に対して find コマンドを単項 NOT 演算子の中で使用した場合、コマンドの開始時刻以降に変更されたファイルは値 n に到達するまで表示されます。
-mtime n n の値は、以下のいずれかの値とすることができます。
n
初期設定時間から減算されたファイル変更時間を 86400 秒で割った値 (余りは切り捨てる) が n のとき、値は真となります。86400 秒は 24 時間です。
-n
初期設定時間から減算されたファイルの変更時間を 86400 秒で割った値 (余りは切り捨てる) が n より小さいとき、値は真となります。
+n
初期設定時間から減算されたファイルの変更時間を 86400 秒で割った値 (余りは切り捨てる) が n より大きいとき (UNIX03 の場合は n+1 より大きいとき)、値は真となります。
注: -mtime の 定義は、Single UNIX Specification バージョン 3 に対応するように変更されました。 ファイルが、24 時間 の n-1 倍から n 倍までの間に変更されたとき、 -mtime の以前の動作は真となりました。デフォルトでは、find -mtimeUNIX03 より前の働きと同様の働きをします。 UNIX03 の動作を可能にするには、環境変数 XPG_SUS_ENVONXPG_UNIX98OFF に設定します。

このオプションの以前の動作を可能にするには、 XPG_UNIX98 変数を ON に設定します。

find コマンドの開始時間以降に変更したファイルは考慮されません。ただし、UNIX03 以外の動作のために find コマンドを単項 NOT 演算子の中で使用した場合、コマンドの開始時刻より後に変更されたファイルは n の値まで表示されます。

-name File File 変数の値がファイル名と一致するとき、値は真となります。通常の シェル・ファイル名生成文字 (sh コマンドを参照) が使用できます。パターンは、引用符またはエスケープ文字で囲む必要があります。find コマンドがシェルから使用される場合は、エスケープ文字が使用されます。円記号 (¥) は、パターン内ではエスケープ文字として使用されます。 ワイルドカード (パターン・マッチング) 文字は、引用符で囲めば使用できます。

[a-z] のような式で、ハイフンは、現行の照合シーケンスによって からを意味します。照合シーケンスは文字範囲内で使用する等価クラスを定義できます。照合シーケンスと等価クラスについて詳しくは、「Globalization Guide and Reference」の『ナショナル・ランゲージ・サポートの概要』を参照してください。

-newer File 現行ファイルが、File 変数で指定したファイルよりも後に変更された場合、値は真となります。
-nogroup ファイルが /etc/group データベース以外のユーザーに属するとき、値は真となります。
-nouser ファイルが /etc/passwd データベースに無いユーザーに属するとき、 値は真となります。
-ok Command -exec 式と同じですが、find コマンドは、指定されたコマンドを開始する必要があるかどうかをユーザーに確認します。ユーザーが肯定応答すると、そのコマンドを始動します。 指定したコマンドの末尾には、引用符で囲んだセミコロンまたは ¥; (円記号 (エスケープ) と セミコロン) を付けなければなりません。
-perm [ - ] OctalNumber ファイルの許可コードが OctalNumber パラメーターと正確に一致する場合、 値は真となります。ファイルの許可については、chmod コマンドのセクションを参照してください。 オプションの - (ハイフン) がある場合は、少なくともこれらの許可が設定 されていれば、この式の値は真になります。 OctalNumber パラメーターには最高 9 個までの 8 進数を指定できます。
注: TCB 環境の一部であるファイルの場合、ファイルのアクセス権に追加のセキュリティー・ビットが付加されます。 これらのファイルには S_ITCB ビットが設定されており、セキュリティー・ビット・セットは 0x010000000 と定義されます。 よって、TCB 対応ファイルの 8 進数の許可の値には、ビット設定 100000000 がその他の許可ビットと一緒に含まれている必要があります。

例: TCB 環境の一部であるファイルをリストするには、find -perm 100000600 -print と入力します。それによって、オーナー読み取り許可とオーナー書き込み許可のみを持ち、TCB 環境の一部であるファイル名がリストされます。許可コードについての説明は、chmod コマンドを参照してください。

-perm [ - ] Mode ファイル・モード・ビットを表すのに、mode 引数が使用されます。 これは、chmod で説明されている <symbolicmode> オペランドと 同じフォーマットで、次のように解釈されます。

最初に、テンプレートは、すべてのファイル・モード・ビットがクリアされているものと想定されます。 オペランド・シンボル (-) には、以下の機能があります。

+
適切なモード・ビットをテンプレート内に設定する。
-
適切なビットをクリアする。
=
プロセスのファイル・モード作成マスクの内容とは関係なく、適切なモード・ビットを設定する。

オペランド・シンボル - は、モードの先頭文字になることはできません。 それにより、オプションを先導するハイフンとのあいまいさが避けられます。初期モードでは、すべてのビットがオフであるので、 先頭文字として - を使用する必要のあるシンボル・モードはありません。

ハイフンが省略されている場合、ファイル許可ビットが、結果として生じるテンプレートの値と正確に一致すると、 プライマリーは真として評価します。 そうでない場合、つまり、モードに、ハイフンがプレフィックスとして付いている場合、 少なくとも、結果として生じるテンプレート内のすべてのビットがファイル許可ビット内に設定されていれば、 プライマリーは真として評価します。

Mode パラメーターのコマンド構文は、chmod コマンド構文と同一です。この式は、ファイルにこれらの許可が正確に付いていれば、値は真となります。 オプションの - (ハイフン) がある場合は、少なくともこれらの許可が設定 されていれば、この式の値は真になります。

-print 値は常に真となります。現行パス名を表示します。 find コマンドは、-exec, - ls または -ok のいずれかの式を指定しない限り、-print 式を想定します。
-prune 値は常に真となります。現行パス名がディレクトリーの場合は、そこから下位のパス名の検索は行われません。 -depth フラグを指定すると、-prune フラグは無視されます。
-size n ファイルの長さが指定した n ブロック (1 ブロックは 512 バイト) であるとき、値は真となります。比較を行うために、ファイル・サイズはブロック単位に切り上げられます。
-regex regular_expression ファイルのパス名全体が正規表現と一致する場合、値は真となります。 このオプションでは正規表現の検索は行いませんが、ファイルの完全パス名と正規表現の突き合わせは行います。 例えば、./test という名前のファイルを突き合わせる場合、.*test.* または .*t.*t という正規表現を使用することができますが、t.*t は使用できません。
-regextype Type 値は常に真となります。このオプションでは、-regex オプションと -iregex オプションにおける正規表現の構文のタイプを指定します。このオプションは、コマンド・ラインの後ろの方にある正規表現にも影響します。

Type 変数には、次のいずれかの値を指定できます。

Basic
基本的な正規表現の構文。
Extended
拡張的な正規表現の構文。
注: -regextype オプションを使用しない場合、正規表現は basic と解釈されます。
-size nc ファイルの長さが正確に、指定した n バイトであるとき、値は真となります。 n 変数の末尾に c を付けると、 ファイル・サイズがブロックではなくバイト単位で測定されたことを示します。
-type Type Type 変数が次のいずれかの値を示すと、値は真となります。
b
ブロック・スペシャル・ファイル
c
キャラクター・スペシャル・ファイル
d
ディレクトリー
f
プレーン・ファイル
l
シンボリック・リンク
p
先入れ先出し (名前付きパイプ)
s
ソケット
-user User ファイルが指定したユーザーに属するとき、値は真となります。 User 変数の値が数字で、/etc/passwd ファイルに ログイン名として記述されていない場合は、ユーザー ID と解釈されます。
-xdev 値は常に真となります。find コマンドは、Path パラメーターで指定されたファイルシステムをまたがって検索するのを防止します。

これらの式は、次の演算子を優先順位が高い方から順に使用して組み合わせることができます。

  1. ( Expression) - 括弧で囲まれた式と演算子のグループ (括弧はシェル専用で、円記号のエスケープ・シーケンスが必要です)。
  2. ! Expression - 式の否定 (「!」は単項 NOT 演算子です)。
  3. Expression [ -a ] Expression - 式の連結 (AND 演算は 2 個の式を並置して暗黙に指定するか、またはオプションの -a 演算子として明示的に記述することができます)。
  4. Expression -o Expression - 式の論理和。-o は OR 演算子です。 第 1 の式が真であれば、第 2 の式は計算されません。
注: find コマンドと cpio コマンドを一緒に使用する場合、-follow オプションと -L オプションを cpio コマンドで使用してください。これら 2 つのオプションを一緒に使用しなければ、望ましくない結果が生じます。 式が存在しない場合は、-print がデフォルトの式の中で使用されます。 例えば、指定された式がプライマリー -exec-ok、および -print をどれも含んでいない場合、その式は (given_expression) -print によって 置き換えられます。-user-group、および -newer プライマリーは、 それぞれの引数を 1 回だけ評価します。 -exec または -ok によって指定されたコマンドを使用しても、 同じファイル上のその後のプライマリーに影響しません。

終了状況

このコマンドは以下の終了値を返します。

項目 説明
0 すべての Path パラメーターが正常に処理されました。
>0 エラーが発生しました。

  1. 指定した基本ファイル名を持つ、ファイルシステム内のすべてのファイルをリストするには、次のように入力します。
    find /  -name .profile -print
    このコマンドによって、ファイルシステム全体が検索され、.profile と いう名前のすべてのファイルの完全なパス名が書き出されます。 / (スラッシュ) は find コマンドに対して、 ルート・ディレクトリーとそのサブディレクトリーすべてを検索するよう指示します。時間の無駄を省くには、ファイルが入っていると思われるディレクトリーを指定して、検索範囲を限定するのが最善の方法です。
  2. 現行ディレクトリー・ツリー内で、特定の許可コードの付いたファイルをリストするには、次のように入力します。
    find . -perm 0600  -print
    このコマンドによって、オーナー読み取り許可とオーナー書き込み許可のみを持ったファイルの名前がリストされます。 . (ドット) は、find コマンドに対して現行ディレクトリーとそのサブディレクトリーを検索するよう指示します。 許可コードについての説明は、chmod コマンドを参照してください。
  3. いくつかのディレクトリー内で特定の許可コードの付いたファイルを検索するには、次のように入力します。
    find manual clients proposals -perm -0600  -print
    このコマンドによって、オーナー読み取り許可とオーナー書き込み許可、およびその他の考えられる許可の付いたファイル名がリストされます。manualclients、および proposals の各ディレクトリーおよびそのサブディレクトリーが検索されます。 前の例で示したように、-perm 0600 は、 0600 と正確に一致する許可コードの付いたファイルのみを選択します。この例では、-perm -0600 は、0600 で示されるアクセスと、それ以外の 0600 レベルより上のアクセスを許可する許可コードの付いたファイルを選択します。 許可コード 0622 と 0744 も適合します。
  4. この 24 時間以内に変更された現行ディレクトリー内のすべてのファイルをリストするには、次のように入力します。
    find .  -ctime 1  -print
  5. 複数のリンクがある正規ファイルを検索するには、次のように入力します。
    find .  -type f  -links +1  -print
    このコマンドによって、複数のリンク (-links +1) を持つ通常のファイル (-type f) の名前がリストされます。
    注: どのディレクトリーにも、少なくとも 2 個のリンク、つまり親ディレクトリー内のエントリーと、 そのディレクトリー自体の . (ドット) エントリーがあります。複数のファイル・リンクについては、ln コマンドのセクションで説明します。
  6. パス名に find が含まれているすべてのアクセス可能なファイルを検索するには、次のように入力します。
    find .  -name '*find*' -print
  7. 1 週間アクセスされておらず、かつ nfs を使用してマウントされていない a.out または *.o という名前のファイルをすべて除去するには、次のように入力します。
    find / ¥( -name a.out -o -name '*.o' ¥) -atime +7 ! -fstype nfs -exec rm {} ¥;
    注: -atime 式の中で使用されている数値が +7 になっています。 これは、アクセスされなかった時間が 1 週間 (24 時間の期間が 7 つ) を超えるファイルに対してコマンドを実行する場合の正しいエントリーです。
  8. SCCS という名前のディレクトリーまたは SCCS ディレクトリー内のファイルを除く、現行ディレクトリー内、またはその下のすべてのファイルのパス名を表示するには、次のように入力します。
    find .  -name SCCS  -prune -o -print
    SCCS ディレクトリーの名前を含む、現行ディレクトリー内、またはその下のすべてのファイルのパス名を表示するには、次のように入力します。
    
    find . -print -name SCCS -prune
  9. 長さが正確に 414 バイトのファイルをすべて検索するには、次のように入力します。
    find . -size 414c -print
  10. .c という接尾部の付いたホーム・ディレクトリー内のすべてのファイルを検索して除去するには、次のように入力します。
    
    find /u/arnold -name "*.c" -exec rm {} ¥;
    find コマンドが .c という接尾部でファイルを識別するたびに、rm コマンドがそのファイルを削除します。 rm コマンドは -exec 式に対して指定される唯一のパラメーターです。{ } (中括弧) は現行パス名を表します。
  11. この例では、dirlink はディレクトリー dir に対するシンボリック・リンクです。コマンド行にあるシンボリック・リンク dirlink を参照することによって dir 内のファイルをリストするには、次のように入力します。
    find -H dirlink -print
  12. この例では、dirlink はディレクトリー dir に対するシンボリック・リンクです。dirlink 内のファイルをリストし、シンボリック・リンクを含め、dir 下のファイル階層をトラバースするには、次のように入力します。
    find -L dirlink -print
  13. シンボリック・リンク dirlink で参照されるファイル dir1dir2 より新しいかどうかを判別するには、次のように入力します。
    find -H dirlink -newer dir2
    注: -H フラグが使用されるので、 時間データは dirlink からではなく dir1 から収集されます。 dir1 は、シンボリック・リンクのトラバースによって検出されます。
  14. 拡張ユーザー名とグループ名付きの ls フォーマットで現行ディレクトリー内のファイルのリストを出すには、次のように入力します。
    find . -ls -long
  15. 現行ディレクトリー内の ACL/EA 設定のファイルをリストするには、次のように入力します。
    find . -ea
  16. 60 分以内に変更されたファイルをリストするには、次のように入力します。
    find . -mmin -60
  17. パス名にパターン afile が含まれているすべてのパス名を /home ディレクトリーで検索するには、次のコマンドを入力します。
    find /home -regextype basic -regex ".*afile.*"
  18. パス名にパターン afile または cap が含まれているすべてのパス名を /home ディレクトリーで検索するには、次のコマンドを入力します。
    find /home -regextype extended -regex ".*afile.*|.*cap.*"
  19. パス名にパターン afileAFILEcap、または CAp が含まれているすべてのパス名を /home ディレクトリーで検索するには、次のコマンドを入力します。
    find /home -regextype extended -iregex ".*afile.*|.*cap.*"

ファイル

項目 説明
/usr/bin/find find コマンドが入っています。
/bin/find find コマンドへのシンボリック・リンク。
/etc/group すべての既知グループのリストが入っています。
/etc/passwd すべての既知ユーザーのリストが入っています。