名前 | 形式 | 機能説明 | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | 関連項目 | 警告 | 注意事項
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 の終わりには、コマンドの終了を示すセミコロン (;) を付ける必要があります。-exec の最後の引数が { } であり、セミコロン (;) ではなくプラス (+) を指定した場合、コマンドが複数回呼び出され、{ } がパス名のグループに置き換えられます。
常に真です。シンボリックリンクをたどり、アクセスしたディレクトリを記憶します。これは、無限ループを検出するためです。無限ループは、シンボリックリンクが親ディレクトリを指している場合などに発生します。この式を -type l 式と組み合わせて使用することはできません。
ファイルが属するファイルシステムの形式が type の場合、真です。
ファイルが gname というグループに属している場合、真です。gname が数値で、/etc/group ファイルや NIS テーブル、NIS+ テーブルに存在しない場合、この数値はグループ ID と見なされます。
ファイルが n という i ノード番号を持つ場合、真です。
ファイルにリンクが n 個ある場合、真です。
ファイルシステムが /etc/dfs/fstypes で定義されたリモートファイルシステムでない場合に、真です。/etc/dfs/fstypes ファイルが存在しない場合、デフォルトのリモートファイルシステムとして nfs が使用されます。このオプションは、ローカルでないディレクトリの階層を下降して検索します。ディレクトリ階層を下降しないでローカルファイルを検索する例については、「使用例」の項を参照してください。
常に真です。現在のパス名と、このパスの統計情報を出力します。統計情報には以下の項目が含まれています。
i ノード番号
KB (1024 バイト) 単位のサイズ
保護モード
ハードリンクの数
ユーザー
グループ
バイト単位のサイズ
更新時刻
ファイルがシンボリックリンクの場合、 `->' の後に、リンクされたファイルのパス名が表示されます。書式は、ls -gilds の書式と同じです (ls(1B) 参照)。この書式は、ls で設定されているのではなく、find 内部で設定されています。
常に真です。検索の範囲を、指定されたディレクトリを持つファイルシステムに限定します。他のファイルシステムへのマウントポイントは表示しません。
ファイルのデータが n 日前に変更されている場合、真です。
pattern が現在のファイル名と一致する場合、真です。通常のシェルファイル名生成文字 (sh(1) 参照) を使用できます。pattern 内のエスケープ文字としては、バックスラッシュ ( \ ) を使用します。find をシェルから起動する場合は、pattern をエスケープするか、pattern 全体を引用符で囲む必要があります。
/usr/bin/find では、ピリオド文字 (.) を pattern の先頭に明示的に指定しない場合、ピリオド文字 (.) で始まる現在のファイル名は pattern に一致しません。/usr/xpg4/bin/find では、この区別は行われません。つまり、ワイルドカードファイル名生成文字はピリオド文字 (.) で始まるファイル名に一致します。
常に真です。現在のファイルを device に cpio -c フォーマット (5120 バイトレコード) で書き込みます。
現在のファイルが、file 引数で示されているファイルの更新時刻以降に変更されている場合、真です。
ファイルが /etc/group ファイルに記載されているグループに属していないか、NIS テーブル、NIS+ テーブルに記載されていない場合、真です。
ファイルが /etc/passwd ファイルに記載されているユーザーのものでないか、NIS テーブル、NIS+ テーブルに記載されていない場合、真です。
-exec と同様の機能ですが、生成されるコマンド行の先頭には疑問符が出力されます。また、ユーザーがプロンプトに答えて y を入力した場合以外は、コマンド行を実行しません。
mode 引数は、ファイルモードビットを表します。書式は、chmod(1) のシンボリックモードオペランド (symbolic_mode_list) と同じです。すべてのファイルモードビットがオフになっているテンプレートを想定して、次の演算子記号 (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 ファイルに記載されているログイン名でないか、NIS テーブルまたは NIS+ テーブルに記載されていない場合、この数値はユーザー 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 回だけです。-exec または -ok オプションで指定したコマンドを呼び出しても、同ファイル中の後続の一次子は影響を受けません。
ファイルが 2 ギガバイト ( 231 バイト) 以上ある場合の find の動作については、 largefile(5) を参照してください。
次に示す 2 つのコマンドは、同じ意味を持ちます。
example% find . example% find . -print |
どちらも、現在のディレクトリ以下の階層構造をすべて出力します。
次の例は、ホームディレクトリにある a.out または *.o という名前のファイルのうち、1 週間アクセスされなかったものをすべて削除します。
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 を指定した 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 |
example% find . ! -local -prune -o -print |
example% find . -xattr |
find の実行に影響を与える環境変数 LC_COLLATE、LC_CTYPE、LC_MESSAGES、NLSPATH の詳細については、 environ(5) を参照してください。
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
---|---|
使用条件 | SUNWcsu |
CSI | 対応済み |
インタフェースの安定性 | 安定 |
chmod(1), cpio(1), ls(1B), sh(1), test(1), stat(2), umask(2), attributes(5), environ(5), largefile(5)
次のオプションは旧式で、将来のリリースではサポートされなくなります。
常に真です。device 上に、現在のファイルを cpio フォーマット (5120 バイトレコード) で書き込みます。
常に真です。device 上に、現在のファイルを cpio -c フォーマット (5120 バイトレコード) で書き込みます。
find を使用して、一定時間内に変更されたファイルを判別する場合は、-print 引数の前に -time 引数を指定します。そうしないと、すべてのファイル名が出力されます。
Solaris のルートファイルシステム下にあるファイルは、実際には、mntfs や namefs などの仮想ファイルシステムのマウントポイントである場合もあります。ufs ファイルシステムと比較するときに、-mount または -xdev を find 式に指定した場合、このようなファイルは選択されません。
名前 | 形式 | 機能説明 | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | 関連項目 | 警告 | 注意事項