名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | 関連項目 | 警告 | 注意事項
/usr/bin/find [-H | -L] path... expression
/usr/xpg4/bin/find [-H | -L] path... expression
find ユーティリティは、path で指定した各パス名に含まれているディレクトリ階層を再帰的に下降し、以下に示す一次子に書き込まれたブール型の式 expression と一致するファイルを検索します。
find は、ファイル階層をどこまでも深く下降することができます。path オペランドのアプリケーションによる指定値の長さが PATH_MAX を超えない限り、パスの長さが原因でエラーになることはありません。
次のオプションを指定できます。
コマンド行でシンボリックリンクに遭遇した場合、シンボリックリンク自身ではなく、シンボリックリンクが参照するファイルのファイル情報とファイルタイプを評価します。参照先のファイルが存在しない場合、シンボリックリンク自身のファイル情報およびファイルタイプを評価します。コマンド行以外でシンボリックリンクに遭遇した場合、シンボリックリンク自身のファイル情報およびファイルタイプを評価します。
シンボリックリンクに遭遇した場合、シンボリックリンク自身ではなく、シンボリックリンクが参照するファイルのファイル情報とファイルタイプを評価します。「注意事項」 を参照してください。
-H と -L は相互排他的なオプションですが、これらを複数指定しても、エラーであるとは判断されません。最後に指定したオプションが cp の動作を決定します。
次のオペランドを指定できます。
ディレクトリ階層構造における、下降を開始する地点のパス名を指定します。
第一引数は - で始まるか、あるいは引数自身が ! または ( で、後続の引数は以下に説明する一次子と演算子で構成される式として解釈されます。以下の説明で、n が一次引数として使われている場合、n は 10 進整数とみなされます。この整数には、次に示すように先頭に正 (+) や負 (-) の符号を付加することも可能です。
n より大きい
n に等しい
n より小さい
有効な式は次のとおりです。
ファイルに拡張 ACL が定義されている場合、真になります。
ファイルが n 日前にアクセスされている場合、真になります。path に含まれているディレクトリのアクセス時間は、find 自体によって変更されます。
常に真です。device 上に、現在のファイルを cpio フォーマット (5120 バイトレコード) で書き込みます。
ファイルのステータスが n 日前に変更されている場合、真になります。
常に真です。ディレクトリ階層を下降して、あるディレクトリにあるすべてのエントリを、そのディレクトリ自体よりも先に検査します。これは、find と cpio(1) を組み合わせて書き込み権のないディレクトリ内のファイルを転送したい場合に役立ちます。
実行したコマンドが終了ステータスとして 0 の値を返す場合、真です。コマンドの終わりには、コマンドの終了を示すセミコロン (;) を付ける必要があります。コマンド引数 {} は、現在のパス名に置き換えられます。-exec の最後の引数が {} であり、セミコロン ; ではなくプラス (+) を指定した場合、コマンドが複数回呼び出され、{} がパス名のグループに置き換えられます。コマンドの呼び出しで、終了ステータスとして 0 以外の値を返す場合、find は 0 以外の終了ステータスを返します。
常に真です。シンボリックリンクをたどり、アクセスしたディレクトリを記憶します。これは、無限ループを検出するためです。無限ループは、シンボリックリンクが親ディレクトリを指している場合などに発生します。この式は find-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 と同様です。
mode 引数は、ファイルモードビットを表します。書式は、chmod(1) のシンボリックモードオペランド (symbolic_mode_list) と同じです。すべてのファイルモードビットがオフになっているテンプレートを想定して、次の演算子記号 (op) があればそれを解釈します。
テンプレート上で、モードビットをオンにする
ビットをオフにする
プロセスのファイルモード生成マスクの内容に関係なく、モードビットをオンにする
このうち - 記号は、mode 引数の最初の文字として記述することはできません。これは、ハイフンではじまるオプションとの混同を避けるためです。初期値としてすべてのモードビットがオフになっているので、最初の文字として - を指定する必要のあるシンボリックモードはありません。
ハイフンが省略されると、一次子は、ファイルのアクセス権ビットの値が結果のテンプレートの値と等しければ、真と判定します。
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、-ls、-ok、-print のいずれも含まれていなければ、その式は次に示すものに置き換えられます。
( given_expression ) -print
-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 '*.o' \) \ -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 の実行に影響を与える次の環境変数の詳細については、environ(5) を参照してください。LANG、 LC_ALL 、LC_COLLATE、LC_CTYPE、LC_MESSAGES、および NLSPATH。
一次子 -exec と -ok の utility_name の場所を判別します。
次の属性についての詳細は、マニュアルページの attributes(5) を参照してください。
属性タイプ |
属性値 |
---|---|
使用条件 |
SUNWcsu |
CSI |
対応済み |
インタフェースの安定性 |
標準 |
chmod(1), cpio(1), ls(1B), sh(1), test(1), acl(2), stat(2), umask(2), attributes(5), environ(5), fsattr(5), largefile(5), standards(5)
次のオプションは旧式で、将来のリリースではサポートされなくなります。
常に真です。device 上に、現在のファイルを cpio フォーマット (5120 バイトレコード) で書き込みます。
常に真です。device 上に、現在のファイルを cpio -c フォーマット (5120 バイトレコード) で書き込みます。
find を使用して、一定時間内に変更されたファイルを判別する場合は、-print 引数の前に -time 引数を指定します。そうしないと、すべてのファイル名が出力されます。
Solaris のルートファイルシステム下にあるファイルは、実際には、mntfs や namefs などの仮想ファイルシステムのマウントポイントである場合もあります。ufs ファイルシステムと比較するときに、-mount または -xdev を find 式に指定した場合、このようなファイルは選択されません。
ほかのユーザーの管理下にあるファイルシステム階層を下降する場合に、-L または -follow オプションを使用することはお勧めしません。特に -exec を使用する場合は、シンボリックリンクによって、起動した階層から find コマンドが抜け出す可能性があります。find コマンドによって実行される型チェックと実行されるコマンドがファイル引数に対して操作する時間との間に固有の競合状態があるため、-exec コマンドが操作するファイルタイプを制限するのに -type を使用するのは十分ではありません。
名前 | 形式 | 機能説明 | オプション | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | ファイル | 属性 | 関連項目 | 警告 | 注意事項