名前 | 形式 | 機能説明 | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | Trusted Solars での変更点 | ファイル | 属性 | 関連項目 | 警告 | 注意事項
find ユーティリティは、 path で指定した各パス名によって、ディレクトリ階層を再帰的に下降し、 以下に示す一次子に書き込まれたブール型の式 expression と一致するファイルを検索します。
find は、ファイル階層をどこまでも深く下降することができます。 path オペランドのアプリケーションによる指定値の長さが PATH_MAX を超えない限り、パスの長さが原因でエラーになることはありません。
tfind コマンドは、プロファイルシェルメカニズムによって定義された、制限付きの環境におけるコマンドの実行をサポートしています。tfind は、-exec command と -ok command 式を除く、tfind のすべての機能を持っています。これらの式の場合、tfind はプロファイルシェル (pfsh) 経由で command を呼び出します。
以下のオペランドを指定できます。
ディレクトリ階層構造における、下降を開始する地点のパス名を指定します。
第一引数は - で始まるか、あるいは引数自身が ! または ( で、後続の引数は以下に説明する一次子と演算子で 構成される式として解釈されます。 以下の説明で、 n が一次引数として使われている場合、 n は 10 進整数とみなされます。この整数には、次に示すように先頭に正 (++) や負 (- ) の符号を付加することも可能です。
n より大きい
n に等しい
n より小さい
有効な式は次のとおりです。
ファイルを n 日前にアクセスした場合、真になります。 path におけるディレクトリのアクセス時間は、 find 自体によって変更されます。
常に真です。 現在のファイルを device 上に cpio フォーマット( 5120 バイトレコード)で書き込みます。
ファイルのステータスを n 日前に変更した場合、真です。
常に真です。 あるディレクトリ中のすべてのエントリ検査が、 そのディレクトリ自身よりも先に行われるように、 ディレクトリ階層内の下降を行います。これは、find と cpio(1) を使用して、 書き込み権のないディレクトリ内のファイルを転送する際に役立ちます。
実行した command が終了ステータスとして 0 の値を返す場合、真です。command の終わりには、エスケープ付きのセミコロンを付ける必要があります。 コマンド引数の { } は、現在のパス名で置換されます。 tfind から発行された場合、コマンドはプロファイルシェル (pfsh) 経由で呼び出されます。
常に真です。シンボリックリンクをたどります。 シンボリックリンクをたどる際、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 内部でフォーマットされます のでご注意ください。
検出したすべてのマルチレベルディレクトリ (MLD) において、プロセスの機密ラベルよりも優位でないシングルレベルディレクトリ (SLD) を検索します。しかし、プロセスの有効特権セットが file_mac_read
と file_mac_search
特権を持っている場合は、すべての SLD を検索します。ファイルシステムは、適用されるべきすべての DAC ポリシーと特権解釈を実施します。
-M を指定せず、path が装飾された MLD を指す場合、その MLD の SLD だけを処理対象とします。それ以外の検出された MLD については、find がすべての特権付きで実行されていた場合でも、自動的にプロセスの機密ラベルと同じラベルを持つ SLD として扱われます。
-M を指定せず、path が装飾されていない MLD を指す場合、その MLD と検出された他のすべての MLD については、find がすべての特権付きで実行されていた場合でも、自動的にプロセスの機密ラベルと同じラベルを持つ SLD として扱われます。
-M を指定せず、path が MLD を指さない場合、遭遇したすべての MLD において、find がすべての特権付きで実行されていた場合でも、プロセスの機密ラベルにある SLD に自動的に変換します。
常に真です。 指定されたディレクトリを持つファイルシステムに対する検索を制限します。 他のファイルシステムへのマウントポイントを表示しません。
ファイルのデータを n 日前に変更した場合、真です。
pattern が現在のファイル名と一致する場合、真です。通常のシェルファイル名生成文字 (sh(1) 参照) を使用できます。 バックスラッシュ ( ¥ ) は、パターン内のエスケープ文字として使用します。find をシェルから起動するとき、パターンをエスケープするか、 あるいは引用符で囲む必要があります。
常に真です。 現在のファイルを device に cpio -c フォーマット( 5120 バイトレコード)で書き込みます。
file 引数で示すファイルの更新時刻以降に現在のファイルを変更した場合、真です。
ファイルが /etc/group ファイルにないグループのものである場合、真です。
ファイルが /etc/passwd ファイルにないユーザーのものである場合、真です。
-exec と同様です。 ただし、生成されるコマンド行は、先頭に疑問符が出力されます。 また、コマンド行が実行されるのは、ユーザーが y を入力して応答する場合だけです。 tfind から発行されると、command がプロファイルシェル (pfsh) を通して呼び出されます。
mode 引数は、ファイルモードビットを表します。 これは chmod(1) , のシンボリックモード オペランドと同じ形式で、次のように解釈されます。 まず、すべてのファイルモードビットがオフになっている テンプレートが想定されます。続いて、次の演算子記号 (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 (シンボリックリンク)、 m ( MLD )、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 指定の 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 時間を単位とする計算には影響はありません。
名前に「abc」を持つファイルを検索します。find プロセスより優位でない機密ラベルを持つすべての SLD を検索します。
example% find begin_path -M -type f -name '*abc*' |
名前に「xyz」を持つ MLD を検索します。find プロセスよりも優位でない機密ラベルを持つすべての SLD を検索します。
example% find begin_path -M -type m -name '*xyz*' |
名前に「abc」を持つファイルを削除します。削除は、現在のディレクトリから始まって、プロファイルシェル (pfsh) 経由で行われます。
example% tfind . -type f -name '*abc*' -exec rm { } ¥; |
次の例は、ユーザーによる読み取り・書き込み・実行、 グループによる読み取り・実行、 その他のユーザーによる読み取り・実行のすべてを許可し、 その他のアクセス権は許可しないファイル名すべてを 再帰的に出力します。
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、 LC_TIME、LC_ALL 、NLSPATH についての詳細は、 environ(5) を参照してください。
find コマンドの変更点は、マルチレベルディレクトリの処理の追加です。新しい -M オプションによって、MLD を検査できるようになりました。-type オプションの新しい引数 (m) によって、MLD も選択できるようになりました。
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
---|---|
使用条件 | SUNWcsu |
CSI | 対応済み |
chmod(1), stat(2)
cpio(1), ls(1), sh(1), test(1), umask(2), attributes(5), environ(5), largefile(5)
次のオプションは旧式で、今後のリリースではサポートされません。
常に真です。現在のファイルを device 上に cpio フォーマット (5120 バイトレコード) で書き込みます。
常に真です。 現在のファイルを device 上に cpio -c フォーマット (5120 バイトレコード) で書き込みます。
find を使用して、時間の範囲内で変更されたファイルを判別するとき、 -print 引数の前に ?time 引数を使用する必要があります。 そうしないと、find はすべてのファイルを出力します。
名前 | 形式 | 機能説明 | オペランド | 使用法 | 使用例 | 環境 | 終了ステータス | Trusted Solars での変更点 | ファイル | 属性 | 関連項目 | 警告 | 注意事項