幸福伝説
[HP-UX] find(1) 본문
find(1) find(1)
名称
find - ファイルの検索
構文
find pathname_list [expression]
説明
find コマンドは、 pathname_list 中のパス名 (すなわち、1つ以上のパス名)
ごとにディレクトリ階層を再帰的に下降し、以下で述べる要素で書かれた論理
式 expression に一致するファイルを検索します。デフォルトでは、 find は
シンボリックリンクは検索の対象としません。
論理式は、短絡評価法で評価されます。すなわち、論理演算 (AND または OR)
の結果が左側の引き数の評価によって得られる場合は、右側の引き数は評価さ
れません。
以下の要素の説明では、引き数 n は10進の整数を表します。ただし、 +n は
n より大きい値、 -n は n より小さい値、また n は n そのものの値をそれ
ぞれ表します。
有効な要素は、次のとおりです。
-depth これは位置に依存しない項で、ディレクトリ階層の
下降の際に、ディレクトリのすべてのエントリーを
ディレクトリ自体より先に調べるようにします。こ
れが有効なのは find を cpio(1) と併用する場合
で、書き込みパーミッションのないディレクトリ内
のファイルを転送することができます。また、
cpio(1) を使用する際に、ディレクトリの修正日付
を変更したくない場合にも利用できます。常に真で
す。
-follow これは位置に依存しない項で、 find がシンボリッ
クリンクを対象とするようになります。シンボリッ
クリンクを対象とする場合、 find は、調べたディ
レクトリの跡を管理しているので、無限ループを検
出できます。たとえば、シンボリックリンクが上位
ディレクトリを指している場合に発生するループを
検出します。これは、 -type l とともに使用しては
いけません。常に真です。
-fsonly FStype これは位置に依存しない項で、ファイルシステムの
タイプが、 FStype (FStype は cdfs、 hfs、
vxfs、または nfs のいずれかで、それぞれ CDFS、
HFS、JFS (VXFS) または NFS の各ファイルシステム
に対応) で指定したタイプと異なる場合に、 find
はディレクトリを下降しません。
ただし、マウントポイントはその親ディレクトリの
FStype を継承します。すなわち、 -fsonly hfs が
指定された場合、 find がHFSファイルシステム上に
Hewlett-Packard Company - 1 - HP-UX 11i Version 2: Sep 2004
find(1) find(1)
マウントされたNFSマウントポイントを検出すると、
そのマウントポイントはアクセスされますが、その
下のエントリーはアクセスされません。また、
-fsonly nfs が指定された場合、NFSファイルシステ
ムのマウントポイントの下にあるHFSファイルシステ
ムはトラバースされないので注意してください。常
に真です。
-local ファイルが物理的にローカルシステム側にある場合
に真になります。これは、検索を物理的にローカル
システム側にあるファイルだけに制限せず、単にそ
のようなファイルを一致させているだけです。 例を
参照してください。
-xdev これは位置に依存しない項で、 find は、
pathname_list に列挙された開始点より下にある
ファイルシステムマウントポイントをトラバースし
なくなります。この場合、マウントポイント自体は
アクセスされますが、そのマウントポイントより下
にあるエントリーはアクセスされません。常に真で
す。
-mountstop -xdevと同じです。この要素は、単に過去のシステム
との互換性のために提供されるものです。したがっ
て、可能な限り -xdev を優先して使用してくださ
い。
-name file パターン file が現在のファイル名の最後の構成要
素に一致した場合に真になります。パターンは、
ファイル名展開のパターンマッチング表記に従って
一致の判定が行われます (regexp(5) を参照)。
Pattern is matched according to Pattern
Matching Notation for filename expansion. find
をシェルから実行する場合は、シェルがメタキャラ
クタとして展開しないようにパターンをエスケー
プ(バックスラッシュを使用) または引用符で囲んで
ください。パターンには、追加のコードセットキャ
ラクタを含めることができます。
-path file これは -name と同じですが、ベース名だけでなく、
(-print の出力と同じような) 絶対パスを使用する
点が異なります。なお、 / は特殊文字とはみなされ
ません。たとえば、 */.profile は、
./home/fred/.profile に一致します。
-perm [-]mode この要素では、引き数 mode はファイルのモード
ビットを表します。この引き数は chmod(1) の mode
オペランドと同じフォーマットですが、最初の文字
に 演算子 - を使用できない点が異なります。記号
形式の mode を使用する場合、指定しないファイル
モードビットはすべてクリアとして扱われます。
Hewlett-Packard Company - 2 - HP-UX 11i Version 2: Sep 2004
find(1) find(1)
先頭の負符号を省略すると、この要素はファイル
パーミッションのビットが mode の値と完全に一致
した場合に真になります。また、記号表現属性 s
(set-user-ID、 set-group-ID) (ユーザー ID の
セット、グループ ID のセット) および t (ス
ティッキービット) に対応するビットは無視されま
す。
mode の前に負符号を付けると、この要素は mode で
オンになっている全ビットがファイルパーミッショ
ン ビットでもオンである場合に真になります。この
場合、記号表現属性 s および t に対応するビット
は有効になります。
-fstype FStype ファイルが属するファイルシステムのタイプが
FStype (FStype は cdfs、 hfs、 nfs、または vxfs
のいずれかで、それぞれ CDFS、HFS、NFS、または
JFS (VXFS) の各ファイルシステム タイプに対応)
の場合に真になります。
-type c ファイルのタイプが c の場合に真になります。 c
は以下のいずれかを表します。
f 通常のファイル
d ディレクトリ
b ブロック型特殊ファイル
c キャラクタ型特殊ファイル
p FIFO (名前付きパイプ)
l シンボリックリンク
s ソケット
n ネットワーク型特殊ファイル
M マウントポイント
-links n ファイルに n 個のリンクが存在した場合に真になり
ます。
-user uname ファイルがユーザー uname に属している場合に真に
なります。 uname が数値で /etc/passwd ファイル
内にログイン名として存在していない場合、それは
ユーザー ID とみなされます。 uname オペランドの
前に + または - を付けて、プライマリの比較を変
更することができます。項 n が10進数の整数を表す
場合、 +n は n より大きいことを意味し、 -n は n
より小さいことを意味し、 n はちょうど n を意味
します。
-group gname ファイルがグループ gnameに属している場合に真に
なります。 gname が数値で /etc/group ファイル内
に存在しない場合、それはグループ ID とみなされ
ます。 gname オペランドの前に + または - を付け
て、プライマリの比較を変更することができます。
項 n が10進数の整数を表す場合、 +n は n より大
Hewlett-Packard Company - 3 - HP-UX 11i Version 2: Sep 2004
find(1) find(1)
きいことを意味し、 -n は n より小さいことを意味
し、 n はちょうど n を意味します。
-nouser ファイルが属するユーザー ID がパスワードデータ
ベース内にリストされていない場合に真になりま
す。 passwd(4) を参照してください。
-nogroup ファイルが属するグループ ID がグループデータ
ベース内にリストされていない場合に真になりま
す。 group(4) を参照してください。
-size n[c] ファイルが n ブロックの長さの場合に真になります
(1 ブロックは 512 バイト)。 n の後に c がある
と、サイズは文字単位になります。
-atime n 開始時刻からファイルのアクセス時刻を引いた時間
が 24 時間の n-1 倍と n 倍の間にある (すなわち
n 日前にアクセスした) 場合に真になります。開始
時刻は、 find ユーティリティの起動時刻と path
オペランドで指定されたファイルへの find ユー
ティリティの実行による最初のアクセス時刻との間
の時刻です。 pathname_list 内のディレクトリのア
クセス時刻は、 find 自身が変更します。
-mtime n 開始時刻からファイルの変更時刻を引いた時間が 24
時間の n-1 倍と n 倍の間にある (すなわちn日前に
変更した) 場合に真になります。開始時刻は、 find
ユーティリティの起動時刻と path オペランドで指
定されたファイルへの find ユーティリティの実行
による最初のアクセス時刻との間の時刻です。
-ctime n 開始時刻からファイルのステータス情報の最終変更
時刻を引いた時間が 24 時間の n-1 倍と n 倍の間
にある (すなわち n 日前にステータス情報を変更し
た) 場合に真になります。開始時刻は、 find ユー
ティリティの起動時刻と path オペランドで指定さ
れたファイルへの find ユーティリティの実行によ
る最初のアクセス時刻との間の時刻です。
-newer file 現在のファイルが、引き数の file より後に修正さ
れている場合に真になります。
-newer[tv1[tv2]] file 現在のファイルの時刻の値 (tv1) が file の時刻の
値 (tv2) より新しい場合に真になります。時刻の値
tv1 と tv2 は、それぞれ次の 3 文字のいずれかで
示されます。
a ファイルに最後にアクセスした時刻
c ファイルのiノードを最後に修正した時
刻
Hewlett-Packard Company - 4 - HP-UX 11i Version 2: Sep 2004
find(1) find(1)
m ファイルを最後に修正した時刻
tv2 文字を省略すると、デフォルトは m になりま
す。 -newer オプションは、 -newermm と等価で
す。
構文例
-newera file
-newermc file
-inum n ファイルのシリアル番号 (iノード番号) が n の場
合に真になります。ただし、ファイルのシリアル番
号は1つのファイルシステム中でのみユニークとなり
ます。したがって、ファイルのシリアル番号のマッ
チングを行っても、検索範囲を 1 つのファイルシス
テムに限定しない限り、参照されたファイルが同じ
であるとは限りません。
-linkedto path ファイルが path で指定したファイルと同じ物理
ファイルであれば (すなわち、 path にリンクされ
ていれば)、真になります。この要素は -inum とほ
とんど同じですが、複数のファイルシステムを対象
に検索を行った場合でも、ファイルが path にハー
ドリンクされていることを正しく検出します。
-print 現在のパス名を出力します。常に真です。
-exec cmd 実行した cmd が終了ステータスとしてゼロの値を返
す場合に真になります。 cmd の後にはセミコロン
(;) またはプラス記号 (+) を付けなければなりませ
ん (セミコロンおよびプラス記号はシェルでは特別
な意味を持つので、エスケープする必要がありま
す)。 + が使用される場合は、 cmd は、pathnames
のセットを集め、そのセットに対して実行します。
最初の {} と + の間のコマンド引き数は無視されま
す。 ; より + の方がよい理由は、パフォーマンス
が非常に向上するからです。コマンド引き数 {} は
現在のパス名で置き換えられます。 cmd は、追加
コードセットキャラクタを含みます。
-ok cmd -exec と同じですが、生成されたコマンド行の先頭
に疑問符を付けて出力し、ユーザーが y と応答した
場合に限って実行する点が異なります。肯定の応答
の形式は、ロケール依存になります。たとえば、ロ
ケールが C の場合は、"y"になります。 environ(5)
の LANG を参照してください。 cmd は、セミコロン
(;) で終わらなければなりません。 (セミコロンは
シェルでは特別な意味を持つので、エスケープする
必要があります)。 cmd は、補助コードセットの文
字を含んでも構いません。
Hewlett-Packard Company - 5 - HP-UX 11i Version 2: Sep 2004
find(1) find(1)
-cpio device 現在のファイルを cpio(4) フォーマット (5120バイ
トレコード) で device に書き込みます。 -cpio を
使用した場合は、 -depth も指定されているとみな
されます。常に真です。
-ncpio -cpio と同じですが、 cpio に -c オプションを追
加します。 -ncpio を使用した場合は、 -depth も
指定されているとみなされます。常に真です。
-prune 現在のエントリーがディレクトリの場合、 find は
そのディレクトリをスキップします。この要素は、
特定のディレクトリを検索の対象から外す場合、あ
るいは cpio -p を使用している際に再帰的なループ
を回避する場合に利用することができます。ただ
し、 -depth オプションが指定されている場合、
-prune は無効になります。詳細は、 -only の説明
と下記の 例を参照してください。常に真です。
-only これは -prune とは逆の肯定論理を適用する要素で
す。 -prune は、各ディレクトリに対する -only の
評価が失敗した場合に、実行されます。次の3つのコ
マンドは、等価になります。
find . -fsonly hfs -print
find . -print -fstype hfs -only
find . -print ! -fstype hfs -prune
ただし、 -depth オプションが指定されている場
合、 -only は無効になります。常に真です。
( expression ) かっこで囲んだ式が真であれば、真になります。ス
ペースは必須です。かっこは、シェルに対して特別
な意味を持つので、 \( や \) のように、エス
ケープする必要があります。
次の演算子を使用して、要素を組み合わせることができます (演算子は優先順
位の高い順に示します)。
! expression 論理 NOT 演算子。 expression が真でなけ
れば、真になります。
expression [-a] expression 論理 AND 演算子。 2つの expression が両
方とも真であれば、真になります。
expression -o expression 論理 OR 演算子。 2つの expression の一方
または両方が真であれば、真になります。
expression が省略された場合、または -print, -ok, -exec, -cpio, -ncpio
がいずれも指定されていない場合は、 -print が指定されているとみなされま
す。 -user, -group, および -newer プライマリは、それぞれの引き数の評価
を一回行います。
Hewlett-Packard Company - 6 - HP-UX 11i Version 2: Sep 2004
find(1) find(1)
HFS アクセス制御リスト
-acl 要素を使用すると、 HFS アクセス制御リスト (ACL) のエントリーを検
索することができます。この要素は、ファイルのアクセス制御リストがアクセ
ス制御リストパターンに一致する場合、またはそこにオプションのアクセス制
御リストエントリーが含まれている場合に真になります (acl(5) を参照)。こ
の要素には、次の3つの形式があります。
-acl aclpatt アクセス制御リストが aclpatt パターンによって指
定されたすべて (0個以上) のパターンエントリーを
含むすべてのファイルに一致します。
-acl =aclpatt アクセス制御リストが aclpatt パターンによって指
定された全部 (0個以上) のパターンエントリーを含
み、同時にそのアクセス制御リスト内のどのエント
リーも aclpatt パターンによって指定されたパター
ンエントリーのうちの少なくとも1つと一致するファ
イルに一致します。
-acl opt オプションのアクセス制御リストエントリーが含ま
れるすべてのファイルに一致します。
aclpatt 文字列は、演算子または短縮形のパターンとして指定することができ
ます。 acl(5) を参照してください。
デフォルトで、 -acl は、アクセス制御リストが aclpatt 内のすべて (0個以
上) のアクセス制御リストパターンを含むファイルに対して真となります。
ファイルのアクセス制御リストに一致しないエントリーが入っていてもかまい
ません。
aclpatt が = で開始している場合、その文字列の残りの部分はファイルのア
クセス制御リスト内のすべてのエントリーと一致しなければなりません。
aclpatt 文字列 (デフォルトの場合、または = の後の部分)にはアクセス制御
リストまたはアクセス制御リストパターンのいずれかが指定できます。ただ
し、アクセス制御リストの場合、 aclpatt には少なくとも3つの基本エント
リー ((user.%, mode) 、 (%.group, mode) 、(%.%, mode)) が入っていなけ
ればなりません。
特殊な例として、 aclpatt が opt の場合、この要素はアクセス制御リストエ
ントリーを持つファイルに対して真になります。
JFS アクセス制御リスト
-aclv 要素を使用すると、JFS アクセス制御リストエントリーの検索をするこ
とができます。この要素は、ファイルのアクセス制御リストがアクセス制御リ
ストのパターンに一致する場合、またはそこにオプションのアクセス制御リス
トエントリーが含まれている場合に真になります (aclv(5) を参照)。次の 3
つの形式があります。
-aclv aclpatt アクセス制御リストが aclpatt パターンによって指
定されたすべて (0 個以上) のパターンエントリー
を含むファイルのすべてと一致します。
Hewlett-Packard Company - 7 - HP-UX 11i Version 2: Sep 2004
find(1) find(1)
-aclv =aclpatt アクセス制御リストが aclpatt パターンによって指
定されたすべて (0 個以上) のパターンエントリー
を含み、同時にそのアクセス制御リスト内のどのエ
ントリーも aclpatt パターンで指定されたパターン
エントリーのうちの少なくとも 1 つと一致するファ
イルと一致します。
-aclv opt オプションのアクセス制御リストエントリーが含ま
れるすべてのファイルに一致します。
デフォルトでは、 -aclv は、アクセス制御リストが aclpatt 内のすべて (0
個以上の) アクセス制御リストパターンを含むファイルに対して真となりま
す。ファイルのアクセス制御リストに一致しないエントリーが入っていてもか
まいません。
aclpatt が =、で開始している場合は、その文字列の残りの部分はファイルの
アクセス制御リスト内のすべてのエントリーと一致しなければなりません。
aclpatt は、コロンで区切られた type フィールド、 ID フィールド、 mode
フィールドで構成されます。複数のコンマで区切った aclpatt を指定するこ
とができます。
type フィールドは user、 group、 class、 other、 * のいずれかで、オプ
ションで default: を前に付けることができます。 user、 group、 class、
other、 default は、それぞれ省略して u、 g、 c、 o、 d とすることもで
きます。 * の type フィールドは上述のいずれのタイプとも一致します。
ID フィールドは、数字のユーザー ID、数字のグループ ID、 /etc/passwd に
あるユーザー ID 文字列、 /etc/group にあるグループ ID 文字列、どの ID
とも一致する * のいずれかです。
mode フィールドは 3 文字で構成される文字列です。先頭の文字は読み込み
パーミッションを示し、 r (読み込み許可)、 -、 (読み込み拒否)、 ? (読み
込みパーミッションがどちらの状態でも一致)のいずれかです。同じように 2
番目の文字は書き込みパーミッションの状態を示し、 w、 -、 ? のいずれか
です。 3 番目の文字は実行パーミッションの状態を示し、 x、 -、 ? のいず
れかです。
特殊な例として、 aclpatt が opt の場合、この要素はオプションのアクセス
制御リストエントリーを持つファイルに対して真になります。
多言語化対応
環境変数
使用する言語環境が指定されていない場合、あるいはヌルの場合は、デフォル
トとして LANG の値が使用されます。
LANG が指定されていない場合、あるいはヌルの場合は、デフォルトとして C
が使用されます (lang(5) を参照)。
LC_ALL が空文字列以外の値に設定されている場合、その他のあらゆる言語環
境変数よりも優先されます。
Hewlett-Packard Company - 8 - HP-UX 11i Version 2: Sep 2004
find(1) find(1)
いずれかの言語対応変数の設定が不当な場合、すべての言語対応変数に C が
設定されているものとみなされます (environ(5) を参照)。
LC_CTYPE は、テキストをシングルバイト/マルチバイトのいずれの文字として
解釈するか、表示可能な文字の分類、および正規表現中の文字クラス表現と照
合される文字を決定します。
LC_MESSAGES は、標準エラーに書き込む診断メッセージおよび標準出力に書き
込む情報メッセージのフォーマットと内容を決めるロケールを指定します。
NLSPATH は、 LC_MESSAGES の処理に使用するメッセージカタログのパスを指
定します。
サポートされるコードセット
シングルバイトおよびマルチバイトの文字コードセットがサポートされます。
例
2つのディレクトリ /example および /new/example の中を検索して、文字列
Where are you が含まれるファイルを見つけ、そのファイル名を出力します。
find /example /new/example -exec grep -l 'Where are you' {} \;
a.out または *.o というファイルのうち、 1週間アクセスされなかったもの
をすべて削除します。
find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;
この場合は、エスケープしたかっこを区切るスペースが必要なので注意
してください。
カレントディレクトリ内の *.o ファイルを長い形式で出力します。
find . -name '*.o' -exec ls -l {} \+
find . -name '*.o' -exec ls -l \+
プラス記号の前の中かっこは無くても構いません。
マシン上の全ファイルの名称を出力します。 nfs マウントポイントは出力し
ますが、 nfs ディレクトリは対象になりません。
find / -fsonly hfs -print
ローカルファイルだけに一致して、リモートでマウントしていることがわかっ
ているディレクトリの内容を調べません。
find / ! -local -prune -o -size +50 -print
これは、リモートディレクトリの最上位にマウントされたローカルファイルシ
ステムがない場合にだけ正しく動作します。この例は、リモートファイルにア
クセスする無駄な時間を無くし、システム上の50ブロックを越えるローカル
ファイルをすべて出力します。
Hewlett-Packard Company - 9 - HP-UX 11i Version 2: Sep 2004
find(1) find(1)
リモートディレクトリにマウントされたローカルファイルシステム内のファイ
ルをチェックする違いの他は上記の例と同じ結果を得るには、次のようにしま
す。
find / -local -size +50 -print
ファイルシステム全体を /Disk にマウントされたディスクにコピーします
(再帰的なコピーは回避します)。次の2つのコマンドは等価になります (-name
の代わりに -path を使用している点に注意してください)。
cd /; find . ! -path ./Disk -only -print | cpio -pdxm /Disk
cd /; find . -path ./Disk -prune -o -print | cpio -pdxm /Disk
ルートディスクを /Disk にマウントされたディスクにコピーします。ただ
し、 / の下のマウントされているファイルシステムはすべてスキップしま
す。ここで -xdev は、 / がマウントポイントであってもスキップしません。
これは / が開始点となっており、 -xdev は開始点より 下のエントリーにし
か影響しないからです。
cd /; find . -xdev -print | cpio -pdm /Disk
ディレクトリサブツリー内にあるすべての通常ファイルのパーミッションを
モード 444 に、またすべてのディレクトリのパーミッションをモード 555 に
それぞれ変更します。
find pathname -type f -print | xargs chmod 444
find pathname -type d -print | xargs chmod 555
find の出力が、 -exec 要素を使用する代わりに、 xargs(1) にパイプ
で送られている点に注意してください。これは、1つのコマンドで処理す
るファイルまたはディレクトリの数が多い場合、 -exec 要素はファイル
やディレクトリごとに別の子プロセスを生成するのに対し、 xargs は
ファイル名またはディレクトリ名をまとめて複数の引き数とし、それを1
個の chmod コマンドに渡すので、プロセス数が少なくなり、システムの
処理効率が高くなるからです。同様に効率を高くするには、 -exec プラ
イマリ用の + 区切り記号を使用することもできます。
アクセス制御リストの例
ユーザー karl が所有していないファイルのうち、そのアクセス制御リストに
karl に関連したエントリーが1つ以上あり、さらに読み取りビットがオン、書
き込みビットがオフのグループ bin の不特定ユーザーのためのエントリーが
1つ入ったファイルをすべて検出します。
find / ! -user karl -acl 'karl.*, % .bin+r-w' -print"
アクセス制御リストのいずれかのエントリーの読み取りビットがオンのファイ
ルをすべて検出します。
find / -acl '*.*+r' -print
Hewlett-Packard Company - 10 - HP-UX 11i Version 2: Sep 2004
find(1) find(1)
アクセス制御リストのすべてのエントリーで書き込みビットがオフで、実行
ビットがオンのファイルをすべて検出します。
find / -acl '=*.*-w+x' -print
オプションのアクセス制御リストエントリーを持つファイルをすべて検出しま
す。
find / -acl opt -print
制約
NFS
-acl 要素は、NFSファイルの場合は必ず偽になります。
警告
相互運用性を確保するために、 cpio は 2GB を超えるファイルのアーカイブ
や 60,000 (60K) を超えるユーザー/グループ ID を持つファイルはサポート
していません。 60K を超えるユーザー/グループ ID を持つファイルは、現在
のプロセスのユーザー/グループ ID でアーカイブされ、復元されます。
著者
find は、AT&T および HP により開発されました。
ファイル
/etc/group グループ名
/etc/mnttab マウントポイント
/etc/passwd ユーザー名
参照
chacl(1)、 chmod(1)、 cpio(1)、 sh(1)、 test(1)、 xargs(1)、
mknod(2)、 stat(2)、 cpio(4)、 group(4)、 passwd(4)、 acl(5)、
environ(5)、 lang(5)、 regexp(5)
標準準拠
find: SVID2, SVID3, XPG2, XPG3, XPG4, POSIX.2
Hewlett-Packard Company - 11 - HP-UX 11i Version 2: Sep 2004
'Unix_Linux > Man Page' 카테고리의 다른 글
[HP-UX] xargs(1) (0) | 2008.11.15 |
---|---|
[HP-UX] ls(1) (0) | 2008.11.15 |
[HP-UX] grep(1) (0) | 2008.11.15 |