名前 | 形式 | 機能説明 | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | 関連項目 | 警告 | 注意事項
find ユーティリティは、 path で指定した各パス名によって、ディレクトリ階層を再帰的に下降し、 以下に示す一次子に書き込まれたブール型の式 expression と一致するファイルを検索します。
find は、ファイル階層をどこまでも深く下降することができます。 path オペランドのアプリケーションによる指定値の長さが PATH_MAX を超えない限り、パスの長さが原因でエラーになることはありません。
以下のオペランドを指定できます。
ディレクトリ階層構造における、下降を開始する地点のパス名を指定します。
第一引数は - で始まるか、あるいは引数自身が ! または ( で、後続の引数は以下に説明する一次子と演算子で 構成される式として解釈されます。 以下の説明で、 n が一次引数として使われている場合、 n は 10 進整数とみなされます。この整数には、次に示すように先頭に正 (+) や負 (-) の符号を付加することも可能です。
n より大きい
n に等しい
n より小さい
有効な式は次のとおりです。
ファイルを n 日前にアクセスした場合、真になります。 path におけるディレクトリのアクセス時間は、 find 自体によって変更されます。
常に真です。 現在のファイルを device 上に cpio フォーマット( 5120 バイトレコード)で書き込みます。
ファイルのステータスを n 日前に変更した場合、真です。
常に真です。 あるディレクトリ中のすべてのエントリ検査が、 そのディレクトリ自身よりも先に行われるように、 ディレクトリ階層内の下降を行います。これは、find と cpio(1) を使用して、 書き込み権のないディレクトリ内のファイルを転送する際に役立ちます。
実行した command が終了ステータスとして 0 の値を返す場合、真です。command の終わりには、エスケープ付きのセミコロンを付ける必要があります。 コマンド引数の { } は、現在のパス名で置換されます。
常に真です。シンボリックリンクをたどります。 シンボリックリンクをたどる際、find は、無限ループを検出するため、 アクセスしたディレクトリを記憶します。 無限ループの起こる例としては、 シンボリックリンクが親ディレクトリを 指した場合があります。 この式は -type l 式とともに使用しないでください。
ファイルが属するファイルシステムの形式が type の場合、真です。
ファイルが gname というグループのものである場合、真です。gname が数値で、さらに /etc/group ファイルに存在しない場合、グループ ID と見なされます。
ファイルが n という i ノード番号を持つ場合、真です。
ファイルにリンクが n 個ある場合、真です。
ファイルシステムが /etc/dfs/fstypes で定義されたリモートファイルシステムではない場合、真です。 /etc/dfs/fstypes ファイルが存在しない場合、デフォルトのリモートファイルシステム として nfs が使用されます。
常に真です。 現在のパス名と、それに関連のある統計情報を合わせて出力します。 統計情報には以下の項目が含まれています。
i ノード番号
KB (1024 バイト) 単位のサイズ
保護モード
ハードリンクの数
ユーザー
グループ
バイト単位のサイズ
更新時刻
ファイルがシンボリックリンクの場合、 `->' の後に、リンクされたファイルのパス名が表示されます。 フォーマットは、ls -gilds のフォーマットと同一です。(ls(1) 参照)。フォーマットは、ls を実行しているのではなく、find 内部でフォーマットされます のでご注意ください。
常に真です。 指定されたディレクトリを持つファイルシステムに対する検索を制限します。 他のファイルシステムへのマウントポイントを表示しません。
ファイルのデータを n 日前に変更した場合、真です。
pattern が現在のファイル名と一致する場合、真です。通常のシェルファイル名生成文字 (sh(1) 参照) を使用できます。 バックスラッシュ ( ¥ ) は、パターン内のエスケープ文字として使用します。find をシェルから起動するとき、パターンをエスケープするか、 あるいは引用符で囲む必要があります。
常に真です。 現在のファイルを device に cpio -c フォーマット( 5120 バイトレコード)で書き込みます。
file 引数で示すファイルの更新時刻以降に現在のファイルを変更した場合、真です。
ファイルが /etc/group ファイルにないグループのものである場合、真です。
ファイルが /etc/passwd ファイルにないユーザーのものである場合、真です。
-exec と同様です。 ただし、生成されるコマンド行は、先頭に疑問符が出力されます。 また、コマンド行が実行されるのは、ユーザーが y を入力して応答する場合だけです。
mode 引数は、ファイルモードビットを表します。 これは chmod(1) のシンボリックモード オペランドと同じ形式で、次のように解釈されます。 まず、すべてのファイルモードビットがオフになっている テンプレートが想定されます。続いて、次の演算子記号 (op) があればそれを解釈します。
テンプレート上で、対応するモードビットをオンにする
対応するビットをオフにする
プロセスのファイルモード生成マスクの内容に関わらず、 対応するモードビットをオンにする
ハイフンが省略されると、一次子は、ファイルのアクセス権ビットの 値が結果のテンプレートの値と等しければ、真と判定します。
mode 引数の先頭がハイフンの場合は、 少なくとも、結果のテンプレートのビットがすべてファイルのアクセス権ビットで 設定されていれば、真と判定します。
ファイルのアクセス権フラグが onum で示す 8 進数字 (chmod(1) を参照 ) に一致すれば、真となります。 onum の先頭が負の符号 (-) の場合、onum 中で設定されているビットだけがファイルのアクセス権フラグと 比較されます。 一致すれば、真と判定されます。
常に真です。 現在のパス名を出力します。
常に真です。 一致する ディレクトリ構造内で、 pattern より下位のディレクトリやファイルは検査しません (「使用例」を参照)。 -depth が指定されている場合は、 -prune の指定は無効になります。
ファイルが n ブロック長 ( 1 ブロック当たり 512 バイト)である場合、真です。 n の後に c を指定すると、サイズは文字単位になります。
ファイルの形式が c である場合、真です。ここで c は、 b (ブロック型特殊ファイル)、 c (文字型特殊ファイル)、 d (ディレクトリ)、 D (door)、 f (プレーンファイル)、 l (シンボリックリンク)、 p (FIFO (名前付きパイプ))、 s (ソケット) のいずれかです。
ファイルの所有者が uname というユーザーである場合、真です。uname が数値で、さらに /etc/passwd ファイルにログイン名として存在しない場合、ユーザー ID と見なされます。
-mount 一次子と同じ。
一次子は下記の演算子 (優先度の高い順) を使用して組み合わせることができます。
括弧で囲まれた式が真である場合、真 (括弧は、シェルが特殊文字とみなすため、エスケープする必要がある)
一次子の否定 (! は単項 not 演算)
一次子の連結 ( and 演算子は2つの一次子を並置することにより示される)
一次子の代替 (-oは or 演算子)
findを cpio とともに使用するとき、 cpio に -L オプションを使う場合は、 find に -follow 式を使用する必要があります。 また逆に、 cpio に -L オプションを使わない場合は、 find に -follow 式を使用しないでください。 これらのことに従わないと、予期しない結果になります。
expression を省略すると、式として -print が使用されます。 expression を指定し、その式の中に -exec、 -ok、 -print のいずれも含まれていなければ、その式は次に示すものに置き換えられます。
( given_expression ) -print
ここで given_expression は、 ユーザーが指定した任意の expression を指します。-user、-group、-newer の各一次子がそれぞれの引数を評価するのは 1 回だけです。
ファイルが 2 ギガバイト ( 231 バイト) 以上ある場合の find の動作については、 largefile(5) を参照してください。
次に示す 2 つのコマンドは、同じ意味を持ちます。
example% find . example% find . -print |
どちらも、現在のディレクトリから得られる ディレクトリの階層構造全体を出力します。
次の例は、 1 週間アクセスのない a.out または *.o という名前のホームディレクトリ内のファイルすべてを削除します。
example% find $HOME ¥( -name a.out -o -name '*.坦 ¥) ¥ -atime +7 -exec rm {} ¥; |
次の例は、現在のディレクトリ以下のディレクトリ内の ファイル名すべてを再帰的に出力します。ただし、 SCCS ディレクトリはスキップします。
example% find . -name SCCS -prune -o -print
次の例は、現在のディレクトリ以下のディレクトリ内の ファイル名すべてを再帰的に出力します。 SCCS ディレクトリの内容をスキップしますが、SCCS ディレクトリ名は出力します。
example% find . -print --name SCCS -prune
次のコマンドは、 -nt-nt 指定の test(1) と基本的に同じです。
example$ if [ -n "$(find file1 -prune -newer file2)" ]; then printf %s¥¥n "file1 is newer than file2" |
なお -atime、-ctime、-mtime における n 指定は、「 24 時間」を単位としています。 たとえば、ある日の 23:59 にアクセスされたファイルがあり、その 2 分後、つまり翌日の 00:01 に次のコマンドを実行したとします。
example% find . -atime -1 print
この場合、ファイルは選択の対象となります。 日付は変わっていても 24 時間は経過していないためです。午前 0 時が間にはさまっても、 24 時間を単位とする計算には影響はありません。
次の例は、ユーザーによる読み取り・書き込み・実行、 グループによる読み取り・実行、 その他のユーザーによる読み取り・実行のすべてを許可し、 その他のアクセス権は許可しないファイル名すべてを 再帰的に出力します。
example% find . -perm u=rwx,g=rx,o=rx
次のように指定することもできます。
example% find . -perm a=rwx,g-w,o-w
次の例は、その他のユーザーによる書き込みを 許可するファイル名すべてを再帰的に出力します (その他のアクセス権は問わない)。
example% find . -perm -o+w
find の実行に影響を与える環境変数 LC_COLLATE、LC_CTYPE、LC_MESSAGES、NLSPATH についての詳細は、 environ(5) を参照してください。
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
使用条件 | SUNWcsu |
CSI | 対応済み |
chmod(1), cpio(1), ls(1), sh(1), test(1), stat(2), umask(2), attributes(5), environ(5), largefile(5)
次のオプションは旧式で、今後のリリースではサポートされません。
常に真です。現在のファイルを device 上に cpio フォーマット (5120 バイトレコード) で書き込みます。
常に真です。 現在のファイルを device 上に cpio -c フォーマット (5120 バイトレコード) で書き込みます。
find を使用して、時間の範囲内で変更されたファイルを判別するとき、 -print 引数の前に ?time 引数を使用する必要があります。 そうしないと、find はすべてのファイルを出力します。
名前 | 形式 | 機能説明 | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | 関連項目 | 警告 | 注意事項