本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 1 : ユーザーコマンド (A~M) > f

find(1)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

find ― ファイルの検索

構文

find pathname_list [expression]

説明

find コマンドは、 pathname_list 中のパス名 (すなわち、1 つ以上のパス名) ごとにディレクトリ階層を再帰的に下降し、 以下で述べる要素で書かれた論理式 expression に一致するファイルを検索します。 デフォルトでは、 find はシンボリックリンクは検索の対象としません。

論理式は、短絡評価法で評価されます。 すなわち、論理演算 (AND または OR) の結果が左側の引き数の評価によって得られる場合は、 右側の引き数は評価されません。

以下の要素の説明では、引き数 n は 10 進の整数を表します。 ただし、 +nn より大きい値、 -nn より小さい値、また nn そのものの値をそれぞれ表します。

有効な要素は、次のとおりです。

-depth 

これは位置に依存しない項で、ディレクトリ階層の下降の際に、 ディレクトリのすべてのエントリーをディレクトリ自体より先に調べるようにします。 これが有効なのは findcpio(1) と併用する場合で、 書き込みパーミッションのないディレクトリ内の ファイルを転送することができます。 また、 cpio(1) を使用する際に、ディレクトリの修正日付を変更したくない場合にも利用できます。 常に真です。

-follow 

これは位置に依存しない項で、 find がシンボリックリンクを対象とするようになります。 シンボリックリンクを対象とする場合、 find は、調べたディレクトリの跡を管理しているので、無限ループを検出できます。 たとえば、シンボリックリンクが上位ディレクトリを指している場合に発生するループを検出します。 これは、 -type l とともに使用してはいけません。 常に真です。

-fsonly FStype 

これは位置に依存しない項で、ファイルシステムのタイプが、 FStype FStypecdfshfsvxfs、 または nfs のいずれかで、それぞれ CDFS、HFS、JFS (VXFS) または NFS の各ファイルシステムに対応) で指定したタイプと異なる場合に、 find はディレクトリを下降しません。

ただし、 マウントポイントはその親ディレクトリの FStype を継承します。 すなわち、 -fsonly hfs が指定された場合、 find が HFS ファイルシステム上にマウントされた 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 を使用する場合、 指定しないファイルモードビットはすべてクリアとして扱われます。

先頭の負符号を省略すると、 この要素はファイルパーミッションのビットが mode の値と完全に一致した場合に真になります。 また、記号表現属性 s (set-user-ID、 set-group-ID) (ユーザー ID のセット、グループ ID のセット) および t (スティッキービット) に対応するビットは無視されます。

mode の前に負符号を付けると、 この要素は mode でオンになっている全ビットがファイルパーミッション ビットでも オンである場合に真になります。 この場合、記号表現属性 s および t に対応するビットは有効になります。

-fstype FStype 

ファイルが属するファイルシステムのタイプが FStype FStypecdfshfsnfs、 または 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 進数の整数を表す場合、 +nn より大きいことを意味し、 -nn より小さいことを意味し、 n はちょうど n を意味します。

-group gname 

ファイルがグループ gname に属している場合に真になります。 gname が数値で /etc/group ファイル内に存在しない場合、それはグループ ID とみなされます。 gname オペランドの前に + または - を付けて、プライマリの比較を変更することができます。 項 n が 10 進数の整数を表す場合、 +nn より大きいことを意味し、 -nn より小さいことを意味し、 n はちょうど n を意味します。

-nouser 

ファイルが属するユーザー ID がパスワードデータベース内にリストされていない場合に真になります。 passwd(4) を参照してください。

-nogroup 

ファイルが属するグループ ID がグループデータベース内にリストされていない場合に真になります。 group(4) を参照してください。

-sizen[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) より新しい場合に真になります。 時刻の値 tv1tv2 は、それぞれ次の 3 文字のいずれかで示されます。

a 

ファイルに最後にアクセスした時刻

c 

ファイルの i ノードを最後に修正した時刻

m 

ファイルを最後に修正した時刻

tv2 文字を省略すると、デフォルトは m になります。 -newer オプションは、 -newermm と等価です。

構文例

-newerafile
-newermcfile

-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 は、補助コードセットの文字を含んでも構いません。

-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-oexpression
  

論理 OR 演算子。 2 つの expression の一方または両方が真であれば、真になります。

expression が省略された場合、または -print, -ok, -exec, -cpio, -ncpio がいずれも指定されていない場合は、 -print が指定されているとみなされます。 -user, -group, および -newer プライマリは、それぞれの引き数の評価を一回行います。

HFS アクセス制御リスト

-acl 要素を使用すると、 HFS アクセス制御リスト (ACL) のエントリーを検索することができます。 この要素は、ファイルのアクセス制御リストが アクセス制御リストパターンに一致する場合、 またはそこにオプションのアクセス制御リストエントリーが含まれている場合に 真になります acl(5) を参照)。 この要素には、次の 3 つの形式があります。

-aclaclpatt 

アクセス制御リストが 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)) が入っていなければなりません。

特殊な例として、 aclpattopt の場合、 この要素はアクセス制御リストエントリーを持つファイルに対して真になります。

JFS アクセス制御リスト

-aclv 要素を使用すると、JFS アクセス制御リストエントリーの検索をすることができます。 この要素は、ファイルのアクセス制御リストがアクセス制御リストのパターンに一致する場合、またはそこにオプションのアクセス制御リストエントリーが含まれている場合に真になります aclv(5) を参照)。 次の 3 つの形式があります。

-aclv aclpatt 

アクセス制御リストが aclpatt パターンによって指定されたすべて (0 個以上) のパターンエントリーを含むファイルのすべてと一致します。

-aclv =aclpatt 

アクセス制御リストが aclpatt パターンによって指定されたすべて (0 個以上) のパターンエントリーを含み、同時にそのアクセス制御リスト内のどのエントリーも aclpatt パターンで指定されたパターンエントリーのうちの少なくとも 1 つと一致するファイルと一致します。

-aclv opt 

オプションのアクセス制御リストエントリーが含まれるすべてのファイルに一致します。

デフォルトでは、 -aclv は、アクセス制御リストが aclpatt 内のすべて (0 個以上の) アクセス制御リストパターンを含むファイルに対して真となります。 ファイルのアクセス制御リストに一致しないエントリーが入っていてもかまいません。

aclpatt=、 で開始している場合は、その文字列の残りの部分はファイルのアクセス制御リスト内の すべてのエントリーと一致しなければなりません。

aclpatt は、コロンで区切られた type フィールド、 ID フィールド、 mode フィールドで構成されます。 複数のコンマで区切った aclpatt を指定することができます。

type フィールドは usergroupclassother* のいずれかで、オプションで default: を前に付けることができます。 usergroupclassotherdefault は、それぞれ省略して ugcod とすることもできます。 *type フィールドは上述のいずれのタイプとも一致します。

ID フィールドは、数字のユーザー ID、数字のグループ ID、 /etc/passwd にあるユーザー ID 文字列、 /etc/group にあるグループ ID 文字列、どの ID とも一致する * のいずれかです。

mode フィールドは 3 文字で構成される文字列です。 先頭の文字は読み込みパーミッションを示し、 r (読み込み許可)、 -、 (読み込み拒否)、 ? (読み込みパーミッションがどちらの状態でも一致) のいずれかです。 同じように 2 番目の文字は書き込みパーミッションの状態を示し、 w-? のいずれかです。 3 番目の文字は実行パーミッションの状態を示し、 x-? のいずれかです。

特殊な例として、 aclpattopt の場合、 この要素はオプションのアクセス制御リストエントリーを持つファイルに対して真になります。

多言語化対応

環境変数

使用する言語環境が指定されていない場合、 あるいはヌルの場合は、デフォルトとして LANG の値が使用されます。

LANG が指定されていない場合、 あるいはヌルの場合は、デフォルトとして C が使用されます lang(5) を参照)。

LC_ALL が空文字列以外の値に設定されている場合、 その他のあらゆる言語環境変数よりも優先されます。

いずれかの言語対応変数の設定が不当な場合、 すべての言語対応変数に 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 ブロックを越えるローカルファイルをすべて出力します。

リモートディレクトリにマウントされたローカルファイルシステム内のファイルをチェックする違いの他は上記の例と同じ結果を得るには、次のようにします。

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 にそれぞれ変更します。

findpathname -type f -print | xargs chmod 444
findpathname -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 

アクセス制御リストのすべてのエントリーで書き込みビットがオフで、 実行ビットがオンのファイルをすべて検出します。

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

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.