find - 指定した基準に合致するファイルを検出する

形式

find path … expression

説明

find は、path で指定したファイル階層を検索し、expression に示された基準に一致するファイルを検出します。各ディレクトリー、ファイル、および特殊ファイルは、expressionによる検査を受けます。 -exec-ok、または -cpio プライマリーを使用した場合は、expression は検出された 各ファイルに対して指定されたコマンドを実行します。存在しない expression または 自動的に実行するコマンドを指定された expression は 、expression の基準に一致するすべてのファイルの 名前を表示するために、-print プライマリーを使用します。

find は、プライマリーおよび演算子のセットから expression を 組み立てます。2 つのプライマリーが並置されている場合は、論理的 AND 演算子を暗黙に指定します。

演算子およびプライマリー

find は、以下の演算子をサポートします。
–a
2 つのプライマリーの間で論理 AND として使用されます。2 つのプライマリーの間に 演算子が使用されていないときは論理 AND が想定されますので、この演算子を省略しても 同じ結果が得られます。
–o
2 つのプライマリーの間で論理 OR として使用されます。
!
式を否定するために、式の前に付けます。
規則: find コマンドを使用する場合、次の規則に従います。
  • 括弧を使用してプライマリーおよび演算子をグループ化する場合、コマンドがシェル環境で実行されていれば、¥ (円記号) を用いて括弧をエスケープする必要があります。
  • すべての プライマリー、演算子、数、引数、および括弧は、ホワイト・スペース で区切らなければなりません。

プライマリー・リスト内のおのおのの number は 10 進数で、オプショナルで正符号 (+) または負符号 (-) を前に付けることができ ます。数が符号なしで与えられた場合 は、find は等しいかどうかをテストします。正符号は「より大きい」または「より古い」を暗黙 指定し、負符号は「より小さい」または「より新しい」を 暗黙指定します。

オプション

この項では、find がサポートするプライマリーを記載します。

ヒント: ACL プライマリー (-acl は除く) を使用すると、パフォーマンスが低下することがあります。
–aaudit auditmask
-aaudit プライマリーは、監査担当者監査ビットを突き合わせるために使用されます。–audit auditmask を参照してください。
-acl c
ACL のタイプが、文字 c で指定されたタイプと同じであるかどうか 突き合わせます。指定できる文字は、次のとおりです。
a
アクセス ACL (拡張 ACL 項目があるかどうかのみ突き合わせます)
d
ディレクトリーのデフォルト ACL
f
ファイルのデフォルト ACL
acl c が定義されておらず、他の ACL プライマリーが使用されている場合、find はこれらの ACL のいずれにも一致します。
-acl_count number
オブジェクトの任意のタイプの ACL について、拡張 ACL 項目の数が number であるかどうか突き合わせます。

number は 10 進数で、オプショナルで正符号 (+) または負符号 (-) を前に付けることができ ます。数が符号なしで与えられた場合 は、find は等しいかどうかをテストします。正符号は「より大きい」または「より古い」を暗黙 指定し、負符号は「より小さい」または「より新しい」を 暗黙指定します。

-acl_entry acl_text
ファイルの ACL に acl_text と同等の項目が含まれている場合に一致します (acl_text は単一の 拡張 ACL 項目です)。このプライマリーは、UID および GID 数値ではなく ユーザーおよびグループ名を使用して突き合わせます。 名前に別名があると、 一致が発生しない可能性があります。この動作は UID および GID に基づいて 突き合わせる -acl_user および -acl_group プライマリーと異なります。 拡張 ACL 項目の形式は以下のとおりです。
[d[efault]: | f[default]:]u[ser]:uid:[+|^]perm
[d[efault]: | f[default]:]g[roup]:gid:[+|^]perm
ここで、
d[efault]
指定すると、拡張 ACL がディレクトリーのデフォルト ACL を参照します。
f[default]
指定すると、拡張 ACL がファイルのデフォルト ACL を参照します。
u[ser]
拡張 ACL が特定の数値ユーザー ID (UID) またはユーザー名を参照します。
g[roup]
拡張 ACL が特定の数値グループ ID (GID) またはグループ名を参照します。
uid
ユーザー名、または数値ユーザー ID (UID)。
gid
グループ名、または数値グループ ID (GID)。
perm
絶対形式 (プレースホルダーとして - が指定されたストリング rwx、または 8 進形式)、または 相対形式 (+ または ^ 修飾子を使用) のいずれかで指定されたアクセス権。
相対アクセス権を設定する場合、+perm を指定すると、ACL 項目の相対アクセス権がオンに なります。^perm を指定すると、ACL 項目の相対アクセス権がオフになります。例えば、以下のように 指定すると、ユーザー Billy の拡張アクセス ACL 項目 (アクセス権は -w- または rw-) を持つファイルが検索されます。
user:Billy:+w^x

acl_text のアクセス権フィールドを省略すると、ACL タイプ、およびユーザー指定項目のユーザー部分またはグループ部分にだけ 一致する ACL 項目が検索されます。

基本 ACL 項目 (ユーザーやグループなど) を検索したい場合は、-perm プライマリーを使用します。

ACL 項目の先頭フィールドには、処理される ACL のタイプ (アクセス、ディレクトリーのデフォルト、またはファイルのデフォルト) を指定できます。タイプを指定しないと、アクセス ACL しか適用されません。ACL 項目を更新する場合 は、基本 ACL 項目を指定します。ただし、指定した内容が現行設定と異なる場合は、ファイルまたはディレクトリーの 許可ビットが変更されます。
-acl_group groupid
groupid の拡張グループ ACL 項目をオブジェクトが持っているかどうか突き合わせます。groupid は、グループ ID 番号でも構いません。

ご使用のセキュリティー製品で ACL がサポートされている場合、グループの基本 ACL 項目は、このプライマリーを使用して突き合わせ られます。数値のグループがグループ・データベース内にグループ名として存在する場 合は、そのグループと関連付けられたグループ ID 番号が使用されます。

-acl_nogroup
グループが定義されていないグループ ACL 項目 (任意のタイプの ACL の) が存在するかどうか突き合わせます。ファイルの少なくとも 1 つの拡張 ACL 項目の GID は、関連するグループ名を持ちません。
-acl_nouser
ユーザーが定義されていないユーザー ACL 項目 (任意のタイプの ACL の) が存在するかどうか突き合わせます。ファイルの少なくとも 1 つの拡張 ACL 項目の UID は、関連するユーザー名を持ちません。
-acl_user userid
userid の拡張ユーザー ACL 項目をオブジェクトの ACL が持っているかどうか 突き合わせます。userid は、ユーザー ID 番号でも構いません。

ユーザーのデータベース内にユーザー名として数字の所有者がある場合、そのユーザー名に関連するユーザー ID の数字が使用されます。ご使用のセキュリティー製品で ACL がサポートされている 場合、ユーザーの基本 ACL 項目は、このプライマリーを使用して突き合わせられます。

–atime number
number 日前に、このファイルにアクセスした人が いるかどうか突き合わせます。

number は 10 進数で、オプショナルで正符号 (+) または負符号 (-) を前に付けることができ ます。数が符号なしで与えられた場合 は、find は等しいかどうかをテストします。正符号は「より大きい」または「より古い」を暗黙 指定し、負符号は「より小さい」または「より新しい」を 暗黙指定します。

–audit auditmask
-audit プライマリーは、ユーザー監査ビットを 突き合わせるために使用されます。 auditmask は、8 進またはシンボル形式で指定できま す。マスクの前に - 文字を付けることが できます (perm プライマリーのように) が、無視されます。
シンボル形式は、コンマで分離されたoperation=condition のリストです。
[rwx]=[sf]
ここで、
=sf
rwx のいずれかの正常終了または失敗
r=s
read の正常終了
r=s, x=sf
read または exec の正常終了、exec の失敗
r, w=s
構文が正しくない
x
構文が正しくない

8 進形式を指定するには、/usr/include/sys/stat.h ヘッダー・ファイルの中で chaudit ビット定数定義を使用します。例えば、stat.h の中で、読み取りアクセスの失敗のフラグは AUDTREADFAIL です。これは、0x02000000 となるよう定義されており、その 8 進値は 200000000 です。この 8 進値を auditmask として使用し、読み取り時の障害を検出できます。

–cpio cpio-file
検出されたファイルを cpio フォーマットでターゲット・ファイル cpio-file に 書き込みます。これは、以下と同等です。
find … | cpio -o >cpio-file
このプライマリーは、コマンドが正常終了したかどうか突き合わせます。
–ctime number
number 日前にこのファイルの属性を変更した人が いるかどうかを突き合わせます。

number は 10 進数で、オプショナルで正符号 (+) または負符号 (-) を前に付けることができ ます。数が符号なしで与えられた場合 は、find は等しいかどうかをテストします。正符号は「より大きい」または「より古い」を暗黙 指定し、負符号は「より小さい」または「より新しい」を 暗黙指定します。

–depth
内容の後でディレクトリーを処理します。存在する場合、このプライマリーは常に突き合わせされます。
–exec command ;
–exec とセミコロンの間のすべての引数をコマンド行として 取り上げ、正確に {} (すなわち、2 つの中括弧) の 引数を現行のファイル名で置き換えます。次に、結果のコマンド行を実行し、このコマンドからのゼロの戻り状況を正常終了の一致として処理し、ゼロ以外の値を失敗として処理します。末尾のセミコロンは、ホワイト・スペースで区切る必要があります。
規則: セミコロンは、シェルのメタキャラクターです。これを expression 内で使用するには、単一引用符で囲むか、前に円記号 (¥) を付けることによってエスケープする必要があります。
–ext c
通常のファイルが、文字 c により指定された拡張属性を持っているかどうか 突き合わせます。拡張属性の詳細は、extattr — ファイルのための拡張属性を設定、リセット、および表示するを参照してください。指定できる文字値は、以下のとおりです。
a
AC=1 でリンクされた場合、APF 許可プログラムとして実行されます。
l
プログラムは共用ライブラリー領域からロードされます。
p
プログラムはプログラム制御であるととられます。
s
プログラムは共用アドレス・スペースで実行できるようになります。
–filetag c
ファイル・タグが、文字 c で指定したタグと同じであるかどうか突き合わせます。指定できる文字値は、以下のとおりです。
b
そのファイルがバイナリー (txtflag = OFF および ccsid = 0xFFFF) として タグ付けされているかどうか突き合わせます。
n
そのファイルが txtflag = OFF を持っているかどうか突き合わせます。
t
そのファイルがテキスト (txtflag = ON) としてタグ付けされているかどうか突き合わせます。
u
そのファイルがタグ付けされていない (ccsid = 0) かどうか突き合わせます。
–filetag_codeset codeset
そのファイルが指定のコード・セットでタグ付けされているかどうか突き合わせます。codeset は、システムに認識されているコード・セット名かコード化数字セット ID (CCSID) のいずれかです。コード・セット名が存在する場合、その名前に関連付けられている数値 CCSID が使用されます。コマンド iconv -l は、既存の CCSID とそれらに対応するコード・セット名をリストすることに留意してください。
注: 相互の別名であるコード・セットが存在するため、ファイル照会オペレーターがテスト中のコード・セットの別名を返した場合、テストが失敗する場合があります。
–follow
シンボリック・リンクをたどります。存在する場合、このプライマリーは常に突き合わせされます。
–group name
グループ所有者が name であるかどうか突き合わせます。name が 実効グループ名でない場合は、それはグループ ID として処理されます。
–inum number
ファイルが inode 番号 number を持っているかどうか突き合わせます。

number は 10 進数で、オプショナルで正符号 (+) または負符号 (-) を前に付けることができ ます。数が符号なしで与えられた場合 は、find は等しいかどうかをテストします。正符号は「より大きい」または「より古い」を暗黙 指定し、負符号は「より小さい」または「より新しい」を 暗黙指定します。

–level number
number より下のレベルに進みません。

number は 10 進数で、オプショナルで正符号 (+) または負符号 (-) を前に付けることができ ます。数が符号なしで与えられた場合 は、find は等しいかどうかをテストします。正符号は「より大きい」または「より古い」を暗黙 指定し、負符号は「より小さい」または「より新しい」を 暗黙指定します。

–links number
ファイルへの number リンクがあるかどうか突き合わせます。

number は 10 進数で、オプショナルで正符号 (+) または負符号 (-) を前に付けることができ ます。数が符号なしで与えられた場合 は、find は等しいかどうかをテストします。正符号は「より大きい」または「より古い」を暗黙 指定し、負符号は「より小さい」または「より新しい」を 暗黙指定します。

–mtime number
number 日前に、このファイルを変更した人が いるかどうか突き合わせます。

number は 10 進数で、オプショナルで正符号 (+) または負符号 (-) を前に付けることができ ます。数が符号なしで与えられた場合 は、find は等しいかどうかをテストします。正符号は「より大きい」または「より古い」を暗黙 指定し、負符号は「より小さい」または「より新しい」を 暗黙指定します。

–name pattern
現行ファイル名を pattern と比較します。一致しない場合は、式は失敗します。pattern は、ファイル名生成 (sh を参照) と 同じ構文を使用します。これは、pattern で指定されたのと同じ数だけの 末尾のパス名コンポーネントを突き合わせます。pattern 内のスラッシュは、明示的にマッチングされます。
–ncpio cpio-file
検出されたファイルを cpio –c フォーマットでターゲット・ファイル cpio-file に 書き込みます。これは、以下と同等です。
find … | cpio -oc >cpio-file

このプライマリーは、コマンドが正常終了したかどうか突き合わせます。

–newer file
検出されたファイルの変更日付を、指定された file のものと比較します。これは、検出されたファイルの変更日付が file よりも最近であるかどうか突き合わせます。
–nogroup
そのファイルが、定義されたグループによって所有されていないかどうか突き合わせます。
–none
なんらかのアクションが取られたことを示します。したがって、find は、デフォルトの –print アクションを起動しません。存在する場合、このプライマリーは常に突き合わせされます。
–nouser
そのファイルが、定義されたユーザーによって所有されていないかどうか突き合わせます。
–okcommand;
–exec と同様ですが、find はコマンドを実行する前に、先に 進んでよいかどうかを確認するためにコマンドを表示します。 find は、ユーザーの入力が “yes” に相当する式の場合にのみ コマンド行を実行します (yes および no の式は、LC_MESSAGES で定義され ます)。“no” に相当する式を入力した 場合は、プライマリーは突き合わせしません。末尾のセミコロンは、ホワイト・スペースで区切る必要があります。

規則: セミコロンは、シェルのメタキャラクターです。これを expression 内で 使用するためには、引用符が必要です。

–perm[-] mask
デフォルトでは、ファイルについての許可が mask で 与えられたものと同じであるかどうか突き合わせます。mask は、8 進または シンボリック・モード (chmod を参照) で指定することができます。シンボリック・モードを使用した場合 、find は、mask 内のビットが いずれも設定されていない状態で始められるものと想定し、シンボリック・モードは希望するビットをオンまたはオフにするための方法であると 想定します。先行の負符号 (-) は特別なものです。これは、mask 内のすべての ビットが設定されているかどうか突き合わせることを意味します。その結果、シンボリック・モードでは、負符号 (-) で始まる mask 値は使用できません。

8 進モードを使用した場合は、findmask の 下の 12 ビットのみを使用します。最初に負符号 (-) を付けると、この場合も findmask 内のすべての制限が ファイル許可リスト内に設定されているかどうかのみ突き合わせます。

–print
現行ファイル名を表示します。このプライマリーは、常に突き合わせます。
–prune
この点以上深くツリーを検索することを停止します。存在する場合は、このプライマリーは常に突き合わせます。–prune は、–depth も指定されている場合には、効力がありません。
–seclabel pattern
ファイルのセキュリティー・ラベルを pattern と比較します。一致しない場合は、式は失敗します。pattern は、 ファイル名生成 (ファイル名の生成を参照) と同じ構文を使用します。
–size number[c]
ファイルのサイズが number ブロックの長さかどうか 突き合わせます。ここで、1 ブロックは 512 バイトです。接尾部 c を含めた場合には、ファイル・サイズは number バイトです。

number は 10 進数で、オプショナルで正符号 (+) または負符号 (-) を前に付けることができ ます。数が符号なしで与えられた場合 は、find は等しいかどうかをテストします。正符号は、「より大きい」または「より古い」を暗黙指定し、 負符号は、「より小さい」または「より新しい」を暗黙指定します。

–type c
ファイルのタイプが、文字 c で指定されたタイプと同じであるかどうか 突き合わせます。指定できる文字は、次のとおりです。
b
ブロック・スペシャル・ファイル (z/OS UNIX System Servicesではサポートされません)
c
キャラクター・スペシャル・ファイル
d
ディレクトリー
f
正規ファイル
l
シンボリック・リンク
n
ネットワーク・ファイル
p
FIFO (名前付きパイプ)
s
ソケット
–user name
ファイルの所有者が name であるかどうか突き合わせます。name は、ユーザー ID 番号でも構いません。
–xdev
ツリー構造探索のルートからデバイス境界を越えません。存在する場合、このプライマリーは常に突き合わせされます。

  1. 監査モードが rwx (読み取り、書き込み、実行) に設定された、接尾部が .c のすべてのファイルを検出するには、次のように入力します。
    find / –name "*.c" –audit rwx=sf 

    現行ディレクトリー内で .c の接尾部が付いた全ファイルに この値をシェルに展開させたくない場合は、"*.c" の前後に引用符が必要です。

  2. 接尾部が .c であり、監査モード・ビットが 777 (rwx) に設定されている すべてのファイルを検出するには、次のように入力します。
    find / –name "*.c" –audit 777
  3. ディレクトリー階層の現在点から始め、拡張子 .c および .h を持つすべてのファイルを見つけるには、次のように入力します。
    find . –name "*.[ch]"
  4. 拡張子 .Z を持ち、最近 3 日間アクセスされていないすべてのファイルを見つけるには、次のように入力します。
    find . –name "*.Z" –mtime +3
  5. セキュリティー・ラベル OS390 を持つすべてのファイルを見つけるには、次のように入力します。
    find . -seclabel OS390
  6. セキュリティー・ラベルが OS390 で始まるすべてのファイルを見つけるには、次のように入力します。
    find . -seclabel "OS390*"
  7. セキュリティー・ラベルを持たないすべてのファイルを見つけるには、次のように入力します。
    find . ! -seclabel "*"
  8. 任意の ACL (アクセス、ファイルのデフォルト、またはディレクトリーのデフォルト) のユーザー Billy の 拡張 ACL ユーザー項目を持っており、現在のディレクトリー点で始まるすべてのファイルとディレクトリーを検索する には、以下のように入力します。
     find  .  -acl_user Billy
    または
    find  .  -acl_entry user:Billy -o -acl_entry d:u:Billy -o -acl_entry f:u:Billy
  9. 任意の ACL タイプの拡張 ACL 項目を 10 より多く持っている (現行ディレクトリーから始まる) ファイルと ディレクトリーをすべて検索するには、以下のように入力します。
    find . -acl_count +10	
  10. ユーザー Averi の拡張 ACL 項目を含むアクセス ACL を持ち、現在のユーザーのホーム・ディレクトリーから 始まるファイルやディレクトリーをすべて検索するには、以下のように入力します。
    find ~ -acl_entry user:Averi
  11. ファイルのデフォルト ACL に Lakers のグループ項目を含み、ディレクトリー階層の現行点で始まる ディレクトリーをすべて検索するには、以下のように入力します。
    find . -acl_entry fdefault:group:Lakers 
  12. ユーザー Marc のホーム・ディレクトリーから始まる Marc のすべてのファイル (すなわち、Marc が 所有するすべてのファイル) を検索するには、以下のように入力します。
    find /u/marc -user marc
  13. ファイルのデフォルト ACL を持つ (現行ディレクトリーから始まる) ディレクトリーをすべて検索する には、以下のように入力します。
    find . -acl f
  14. ファイルのデフォルト ACL またはディレクトリーのデフォルト ACL に Lakers のグループ項目を 含み、ディレクトリー階層の現行点で始まるディレクトリーをすべて検索するには、以下のように入力します。
    find . -acl_entry fdefault:group:Lakers -o -acl_entry default:group:Lakers

ローカライズ

find は、以下のローカライズ環境変数を使用します。
  • LANG
  • LC_ALL
  • LC_COLLATE
  • LC_CTYPE
  • LC_MESSAGES
  • LC_SYNTAX
  • NLSPATH

詳しくは、ローカライズを参照してください。

終了値

0
正常終了
1
以下のいずれかによる失敗。
  • 十分なメモリーがない
  • –type の後に指定された文字が正しくない
  • –newer のファイルの情報が入手できない
  • –perm の許可が正しくない
  • –cpio オプションのファイルを開くことができない
  • 無効なユーザー名またはグループ名
  • PATH 変数をアクセスできない
  • –exec または –ok で指定されたコマンドが実行できない
  • 構文エラー
  • 式が複雑すぎるためにスタック・オーバーフローが起きた
2
以下のいずれかによる失敗。
  • コマンド行のオプションが正しくない
  • コマンド行の引数が足りない
  • オプションが指定されていない
  • 引数リストが正しく終了していない

メッセージ

以下の エラー・メッセージが出される可能性があります。
bad number specification in string
数値を取るオプション (例えば、–atime–ctime) が 指定されましたが、オプションの後に有効な数が指定されませんでした。
cannot stat file name for -newer
1 つのファイルを別のファイルと比較する ために –newer オプションが使用されました。しかし、find は指定されたファイルの変更時刻を 入手できませんでした。通常、ファイルが存在しないか、またはこの情報を入手するための適切な許可がありません。

移植性

POSIX.2, X/Open 移植性ガイド, UNIX システム.

大部分の UNIX システムには –print のデフォルト・アクションがありません。したがって、それらには –none は必要ありません。–a 演算子は、多くの UNIX システムでは記述されていません。

次のプライマリーは、POSIX 標準の拡張です。–aaudit–acl–acl_count–acl_entry–acl_group–acl_nogroup–acl_nouser–acl_user–audit–audit–cpio–follow–level–ncpio–none

aaudit および audit オプションは、z/OS シェルに固有なものです。

関連情報

chauditchmodcpiosh