ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11.1 Information Library (日本語) |
- ファイルの検索
/usr/bin/find [-H | -L] path... expression
/usr/xpg4/bin/find [-H | -L] path... expression
find ユーティリティーは、path で指定した各パス名に含まれているディレクトリ階層を再帰的に下降し、次に示す一次子に書き込まれたブール型の式 expression と一致するファイルを検索します。
find は、ファイル階層を任意の深さまで下降することができ、アプリケーションによって指定される path オペランドが PATH_MAX の要件を超えないかぎり、パスの長さの制限が原因でエラーになることはありません。
find は、無限ループ、つまり、最後に検出されたファイルの祖先である、前にアクセスしたディレクトリに入る動作を検出します。
サポートしているオプションは、次のとおりです。
コマンド行でシンボリックリンクに遭遇した場合、シンボリックリンク自身ではなく、シンボリックリンクが参照するファイルのファイル情報とファイルタイプを評価します。参照先のファイルが存在しない場合、シンボリックリンク自身のファイル情報およびファイルタイプを評価します。コマンド行以外でシンボリックリンクに遭遇した場合、シンボリックリンク自身のファイル情報およびファイルタイプを評価します。
シンボリックリンクに遭遇した場合、シンボリックリンク自身ではなく、シンボリックリンクが参照するファイルのファイル情報とファイルタイプを評価します。「注意事項」 を参照してください。
相互排他的なオプションである -H と -L を複数指定しても、エラーとはみなされません。最後に指定したオプションが cp の動作を決定します。
次のオペランドがサポートされています。
ディレクトリ階層構造における、下降を開始する地点のパス名を指定します。
第一引数は - で始まるか、あるいは引数自身が ! または ( で、後続の引数は以下に説明する一次子と演算子で構成される式として解釈されます。以下の説明で、n がプライマリ引数として使われている場合、それは 10 進整数として解釈されます。この整数には、次に示すように先頭に正 (+) や負 (-) の符号を付加することも可能です。
n より大きい
n に等しい
n より小さい
有効な式は次のとおりです。
ファイルに拡張 ACL が定義されている場合、真になります。
ファイルが最後にアクセスされたのは n 分前です。
ファイルが n 日前にアクセスされている場合、真になります。path に含まれているディレクトリのアクセス時間は、find 自体によって変更されます。
ファイルのステータスが最後に変更されたのは n 分前です。
常に真です。device 上に、現在のファイルを cpio フォーマット (5120 バイトレコード) で書き込みます。
ファイルのステータスが n 日前に変更されている場合、真になります。
常に真です。ディレクトリ階層を下降して、あるディレクトリにあるすべてのエントリを、そのディレクトリ自体よりも先に検査します。これは、find と cpio(1) を組み合わせて書き込み権のないディレクトリ内のファイルを転送したい場合に役立ちます。
実行したコマンドが終了ステータスとして 0 の値を返す場合、真です。コマンドの終わりには、コマンドの終了を示すセミコロン (;) を付ける必要があります。コマンド引数 {} は、現在のパス名に置き換えられます。-exec の最後の引数が {} であり、セミコロン (;) ではなくプラス (+) を指定した場合、コマンドが複数回呼び出され、{} がパス名のグループに置き換えられます。コマンドの呼び出しで、終了ステータスとして 0 以外の値を返す場合、find は 0 以外の終了ステータスを返します。
常に真であり、expression のどの位置に指定されていても常に評価されます。find コマンドを -H オプションまたは -L オプションを指定して呼び出すときに、-follow を使用した場合、動作は不確定です。シンボリックリンクをたどり、アクセスしたディレクトリを記憶します。これは、無限ループを検出するためです。無限ループは、シンボリックリンクが親ディレクトリを指している場合などに発生します。この式を find -type l 式と組み合わせて使用しないようにしてください。「注意事項」 を参照してください。
ファイルが属するファイルシステムの形式が type の場合、真です。
ファイルが gname というグループに属している場合、真です。gname が数値で、group(4) データベースに存在しない場合、これはグループ ID と見なされます。
-name と似ていますが、パターンと現在のファイル名のベース名との照合で、大文字と小文字は区別されません (「使用例」を参照してください)。-name オプションとは異なり、先頭のピリオドは特別に扱われず、/usr/bin/find と /usr/xpg4/bin/find の両方で、ワイルドカードファイル名生成文字を、. で始まるファイル名と一致させることができます。
ファイルが n という i ノード番号を持つ場合、真です。
ファイルにリンクが n 個ある場合、真です。
ファイルシステムが /etc/dfs/fstypes で定義されたリモートファイルシステムでない場合に、真です。/etc/dfs/fstypes ファイルが存在しない場合、デフォルトのリモートファイルシステムとして nfs が使用されます。このオプションは、ローカルでないディレクトリの階層を下降して検索します。-ディレクトリ階層を下降しないでローカルファイルを検索する例については、「使用例」の節を参照してください。
常に真です。現在のパス名と、このパスの統計情報を出力します。統計情報には以下の項目が含まれています。
i ノード番号
KB (1024 バイト) 単位のサイズ
保護モード
ハードリンクの数
user
group
サイズ (単位はバイト)
変更時間。
ファイルが特殊ファイルの場合、サイズフィールドにはメジャーデバイス番号とマイナーデバイス番号が入ります。
ファイルがシンボリックリンクの場合、`→' の後に、リンクされたファイルのパス名が表示されます。書式は、ls -gilds の書式と同じです (ls(1B) 参照)。
この書式は、ls で設定されているのではなく、find 内部で設定されています。
ファイルのデータが最後に変更されたのは n 分前です。
常に真です。検索の範囲を、指定されたディレクトリを持つファイルシステムに限定します。他のファイルシステムへのマウントポイントは表示しません。
ファイルのデータが n 日前に変更されている場合、真です。
pattern が現在のファイル名のベース名に一致する場合は真。通常のシェルファイル名生成文字 (sh(1) を参照) を使用できます。pattern 内のエスケープ文字としては、バックスラッシュ ( \ ) を使用します。find をシェルから起動する場合は、pattern をエスケープするか、pattern 全体を引用符で囲む必要があります。
/usr/bin/find では、ピリオド文字 (.) を pattern の先頭に明示的に指定しない場合、ピリオド文字 (.) で始まる現在のファイル名は pattern に一致しません。/usr/xpg4/bin/find では、この区別は行われず、ワイルドカードファイル名生成文字はピリオド文字 (.) で始まるファイル名に一致します。
常に真です。device 上に、現在のファイルを cpio -c フォーマット (5120 バイトレコード) で書き込みます。
現在のファイルが、file 引数で示されているファイルの更新時刻以降に変更されている場合、真です。
ファイルが group(4) データベースにないグループに属している場合、真です。
ファイルが passwd(4) データベースにないユーザーに属している場合、真です。
生成されるコマンド行の先頭に疑問符が出力されること、および肯定的な応答の場合にのみ実行されることを除き、-exec と同様です。
mode 引数は、ファイルモードビットを表します。書式は、chmod(1) で説明されているシンボリックモードオペランド (symbolic_mode_list) と同じで、次のように解釈されます。最初に、すべてのファイルモードビットがオフになっているテンプレートを想定します。演算子記号 (op):
テンプレート上で、モードビットをオンにします
ビットをオフにします
プロセスのファイルモード生成マスクの内容に関係なく、モードビットをオンにします
このうち - 記号は、mode 引数の最初の文字として記述することはできません。これは、ハイフンではじまるオプションとの混同を避けるためです。初期値としてすべてのモードビットがオフになっているので、最初の文字として - を指定する必要のあるシンボリックモードはありません。
ハイフンが省略されると、一次子は、ファイルのアクセス権ビットの値が結果のテンプレートの値と等しければ、真と判定します。
mode 引数がハイフンではじまる場合は、結果のテンプレートのビットがすべてファイルのアクセス権ビットで設定されていれば、真と判定します。
ファイルのアクセス権フラグが 8 進数字 onum に正確に一致すれば、真になります (chmod(1) を参照)。onum の先頭がマイナス記号 (-) の場合、ファイルのアクセス権フラグと 比較されるのは、onum 中で設定されているビットだけになります。比較の結果、一致すれば、真と判定されます。
常に真です。現在のパス名を出力します。
常に真です。現在のパス名を出力します。そのあとには、-print で使用される NEWLINE 文字ではなく、NULL 文字が続きます。
これにより、NEWLINE またはほかのタイプのスペースを含むファイル名を、find の出力を処理するプログラムが正しく解釈できるようになります。このオプションは、cpio および xargs の -0 オプションに相当します。
常に真です。一致するディレクトリ構造内で、pattern より下位のディレクトリやファイルは検査しません(「使用例」を参照)。-depth が指定されている場合は、-prune の指定は無効になります。
ファイルが n ブロック長 (1 ブロックは 512 バイト)である場合、真です。n のあとに c を指定すると、サイズはバイト単位になります。
ファイルの形式が c である場合、真です。ここで c は、b (ブロック型特殊ファイル)、c (文字型特殊ファイル)、d (ディレクトリ)、D (door)、f (プレーンファイル)、l (シンボリックリンク)、p (FIFO (名前付きパイプ))、s (ソケット) のいずれかです。
ファイルの所有者が uname に指定したユーザーである場合、真です。uname が数値で、passwd(4) データベースにログイン名として記載されていない場合、これはユーザー ID と見なされます。
-mount 一次子と同じ。
ファイルが拡張属性を持っている場合、真です。
一次子は、以下の演算子 (優先度の高い順) を使用して組み合わせることができます。
括弧で囲まれた式が真である場合、真 (括弧は、シェルの特殊文字とみなされるため、エスケープする必要がある)
一次子の否定 (! は単項 not 演算子)。
一次子の連結 ( and 演算子は 2 つの一次子を並置することにより示される)
一次子の代替 (-o は or 演算子)。
find を cpio と組み合わせて使用する場合、cpio に -L オプションが指定されているときは、find に -L オプションまたは -follow プリミティブを使用する必要があります。cpio に L オプションが指定されていない場合は、find に L オプションまたは follow プリミティブを使用してはいけません。そうしない場合、結果は不確定です。
expression を省略すると、式として -print が使用されます。expression を指定し、その式の中に -exec、-ok、-ls、-print のいずれも含まれていなければ、その式は次に示すものに置き換えられます。
(指定された式) -print
-user、-group、-newer の各一次子がそれぞれの引数を評価するのは 1 回だけです。-exec または -ok で指定したコマンドを呼び出しても、同ファイル中の後続の一次子は影響を受けません。
ファイルが 2G バイト (231 バイト) 以上ある場合の find の動作については、largefile(5) を参照してください。
例 1 ディレクトリ階層を出力する
次のコマンドは同等です。
example% find . example% find . -print
どちらも、現在のディレクトリ以下の階層構造をすべて出力します。
例 2 ファイルを削除する
次のコマンドは、ホームディレクトリにある a.out または *.o という名前のファイルのうち、1 週間アクセスされなかったものをすべて削除します。
example% find $HOME \( -name a.out -o -name '*.o' \) \ -atime +7 -exec rm {} \;
例 3 すべてのファイル名 (SCCS ディレクトリを除く) を出力する
次の例は、現在のディレクトリとそれ以下のディレクトリ内にあるファイル名すべてを再帰的に出力します。ただし、SCCS ディレクトリはスキップします。
example% find . -name SCCS -prune -o -print
例 4 すべてのファイル名と SCCS ディレクトリを出力する
次の例は、現在のディレクトリとそれ以下のディレクトリ内にあるファイル名すべてを再帰的に出力します。SCCS ディレクトリの内容は出力しませんが、SCCS ディレクトリ名は出力します。
example% find . -print -name SCCS -prune
例 5 新しいファイルを検査する
次のコマンドは、-nt を指定した test(1) と基本的に同等です。
example$ if [ -n "$(find file1 -prune -newer file2)" ]; then printf %s\\n "file1 is newer than file2"
例 6 24 時間モードを使用してファイルを選択する
-atime、-ctime、-mtimeで指定する n の最小単位は 24 時間です。たとえば、ある日の 23:59 にアクセスされたファイルがあり、その2 分後、つまり翌日の 00:01 に次のコマンドを実行したとします。
example% find . -atime -1 -print
この場合、ファイルは選択の対象となります。日付は変わっていても 24 時間は経過していないためです。午前 0 時が間にはさまっていても、24 時間を単位とする計算には影響はありません。
例 7 指定したファイルアクセス権に一致したファイルを出力する
次の例は、ユーザーによる読み取り・書き込み・実行、グループによる読み取り・実行、その他のユーザーによる読み取り・実行が許可されており、その他のアクセス権は許可されていないファイル名すべてを再帰的に出力します。
example% find . -perm u=rwx,g=rx,o=rx
次のように指定することもできます。
example% find . -perm a=rwx,g-w,o-w
例 8 その他のユーザーによる書き込みが許可されているファイルを出力する
次の例は、その他のユーザーによる書き込みが 許可されているファイル名すべてを再帰的に出力します (読み取り、書き込みが許可されているかどうかは関係ありません)。
example% find . -perm -o+w
例 9 ローカルファイル (ローカルでないディレクトリ階層は下降しない) を出力する
example% find . ! -local -prune -o -print
例 10 拡張属性を持つ名前空間内のファイルを出力する
example% find . -xattr
例 11 大文字と小文字を区別せずにすべての PDF ファイル名を出力する
次の例は、.pdf 、.PDF、.Pdf などの拡張子を持つすべてのファイル名を検索します。
example% find . -iname '*.pdf'
find の実行に影響を与える次の環境変数の詳細については、environ(5) を参照してください。LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES、および NLSPATH。
一次子 -exec と -ok の utility_name の場所を判別します。
肯定応答は、ユーザーのロケールの LC_MESSAGES カテゴリの yesexpr キーワードで定義されている拡張正規表現を使用して処理されます。LC_COLLATE カテゴリに指定されているロケールは、yesexpr に定義されている式に使用される範囲、同等クラス、および複数文字照合要素の動作を定義します。LC_CTYPE に指定されているロケールは、テキストデータのバイト列を文字として解釈するロケールや、yesexpr に定義されている式に使用される文字クラスの動作を定義します。locale(5) を参照してください。
次の終了ステータスが返されます。
オペランドで指定されたパスはすべて正常に検査されました。
エラーが発生した。
パスワードファイル
グループファイル
分散ファイルシステムパッケージを登録したファイル
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|
chmod(1), cpio(1), sh(1), test(1), ls(1B), acl(2), stat(2), umask(2), group(4), passwd(4), attributes(5), environ(5), fsattr(5), largefile(5), locale(5), standards(5)
次のオプションは廃止済みで、将来のリリースではサポートされなくなります。
常に真です。device 上に、現在のファイルを cpio フォーマット (5120 バイトレコード) で書き込みます。
常に真です。device 上に、現在のファイルを cpio -c フォーマット (5120 バイトレコード) で書き込みます。
find を使用して、一定時間内に変更されたファイルを判別する場合は、-print 引数の前に -mtime 引数を使用します。そうしないと、すべてのファイル名が出力されます。
Solaris のルートファイルシステム下にあるファイルは、実際には、mntfs や namefs などの仮想ファイルシステムのマウントポイントである場合もあります。ufs ファイルシステムと比較するときに、-mount または -xdev を find 式に指定した場合、このようなファイルは選択されません。
ほかのユーザーの管理下にあるファイルシステム階層を下降する場合に、-L または -follow オプションを使用することはお勧めしません。特に -exec を使用する場合は、シンボリックリンクによって、起動した階層から find コマンドが抜け出す可能性があります。find コマンドによって実行される型チェックと実行されるコマンドがファイル引数に対して操作する時間との間に固有の競合状態があるため、-exec コマンドが操作するファイルタイプを制限するのに -type を使用するのは十分ではありません。