コンテンツにスキップ
manual/ ja

COMMAND REFERENCE / 日本語訳

find(1)

Apple / macos 26.6.2SECTION 1英語の原文 ↗
版情報
バリエーション
25g83
原文形式
roff
原文 SHA-256
72de98371bbac79f8dc59b50e4d506c23fc82add3da9c5bd60a36f8bacc0cf25
翻訳
LLM による日本語訳

find — ファイル階層をたどる

find

[-H | -L | -P] [-EXdsx] [-f path] path ... [expression]

find

[-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

find ユーティリティは、列挙された各 path のディレクトリツリーを再帰的に降り、ツリー内の各ファイルについて(以下に示す「一次式」と「オペランド」から構成される)expression を評価します。

オプションは次のとおりです。

-E

-regex および -iregex 一次式に続く正規表現を、基本正規表現(BRE)ではなく拡張(モダン)正規表現として解釈します。どちらの形式も re_format(7) マニュアルページに詳しく記載されています。

-H

コマンドラインで指定された各シンボリックリンクについて、返されるファイル情報とファイルタイプ(stat(2) を参照)を、リンク自体ではなくリンク先ファイルのものにします。リンク先ファイルが存在しない場合、ファイル情報とタイプはリンク自体のものになります。コマンドラインにないすべてのシンボリックリンクのファイル情報は、リンク自体のものになります。

-L

各シンボリックリンクについて、返されるファイル情報とファイルタイプ(stat(2) を参照)を、リンク自体ではなくリンク先ファイルのものにします。リンク先ファイルが存在しない場合、ファイル情報とタイプはリンク自体のものになります。

このオプションは、非推奨の -follow 一次式と同等です。

-P

各シンボリックリンクについて、返されるファイル情報とファイルタイプ(stat(2) を参照)を、リンク自体のものにします。これが既定値です。

-X

find を xargs(1) と組み合わせて安全に使用できるようにします。ファイル名に xargs(1) が使用する区切り文字のいずれかが含まれている場合、標準エラー出力に診断メッセージを表示し、そのファイルをスキップします。区切り文字には、単一引用符(「'」)、二重引用符(「"」)、バックスラッシュ(「\」)、空白、タブ、および改行文字が含まれます。

ただし、効果的な代替手段として、「xargs -0」と組み合わせて -print0 一次式を使用することも検討できます。

-d

find に深さ優先の走査を行わせます。

このオプションは、IEEE Std 1003.1-2001(「POSIX.1」)で規定された -depth 一次式に相当する BSD 固有のオプションです。詳細については、PRIMARIES にある説明を参照してください。

-f path

再帰的に探索するパスのリストに path を追加します。これは、path の先頭が、本来なら expression として解釈される文字、すなわち「!」、「(」、「-」のいずれかである場合に便利です。

-s

find にファイル階層を辞書順、すなわち各ディレクトリ内でアルファベット順に走査させます。注: 「find -s」と「find | sort」では結果が異なることがあります。

たとえば、「find -s」では、ディレクトリ「foo」とその全内容がディレクトリ「foo」より前になります。一方、「find | sort」では、ASCII において「.」が「/」より前にあるため、ディレクトリ名「foo」が「foo/bar」のような文字列より前になります。C 以外のロケールでは、照合順序の違いにより結果がさらに変わることがあります。

-x

find が、探索を開始したファイルとは異なるデバイス番号を持つディレクトリへ降りないようにします。

このオプションは、非推奨の -xdev 一次式と同等です。

数値引数を取るすべての一次式では、数値の前にプラス記号(「+」)またはマイナス記号(「-」)を付けられます。前置されたプラス記号は「n より大きい」、マイナス記号は「n より小さい」、どちらもない場合は「ちょうど n」を意味します。

-Bmin n

ファイルの inode 作成時刻と find の開始時刻との差を 1 分単位で切り上げた値が n 分であれば真です。

-Bnewer file

-newerBm と同じです。

-Btime n[smhdw]

単位を指定しない場合、ファイルの inode 作成時刻と find の開始時刻との差を 24 時間単位で切り上げた値が n 個の 24 時間単位であれば、この一次式は真と評価されます。

単位を指定した場合、ファイルの inode 作成時刻と find の開始時刻との差がちょうど n 単位であれば、この一次式は真と評価されます。サポートされる時間単位については、-atime 一次式の説明を参照してください。

-acl

他の一次式と組み合わせて、拡張 ACL を持つファイルを検索するために使用できます。詳細については acl(3) を参照してください。

-amin [-|+]n

ファイルの最終アクセス時刻と find の開始時刻との差を 1 分単位で切り上げた値が、n 分より大きい(+n)、n 分より小さい(-n)、またはちょうど n 分であれば真です。

-anewer file

-neweram と同じです。

-atime n[smhdw]

単位を指定しない場合、ファイルの最終アクセス時刻と find の開始時刻との差を 24 時間単位で切り上げた値が n 個の 24 時間単位であれば、この一次式は真と評価されます。

単位を指定した場合、ファイルの最終アクセス時刻と find の開始時刻との差がちょうど n 単位であれば、この一次式は真と評価されます。指定できる時間単位は次のとおりです。

s

秒

m

分(60 秒)

h

時間(60 分)

d

日(24 時間)

w

週(7 日)

1 つの -atime 引数では、任意の数の単位を組み合わせられます。たとえば「-atime -1h30m」です。単位は、おそらく + または - 修飾子と組み合わせた場合にのみ有用です。

-cmin [-|+]n

ファイル状態情報の最終変更時刻と find の開始時刻との差を 1 分単位で切り上げた値が、n 分より大きい(+n)、n 分より小さい(-n)、またはちょうど n 分であれば真です。

-cnewer file

-newercm と同じです。

-ctime n[smhdw]

単位を指定しない場合、ファイル状態情報の最終変更時刻と find の開始時刻との差を 24 時間単位で切り上げた値が n 個の 24 時間単位であれば、この一次式は真と評価されます。

単位を指定した場合、ファイル状態情報の最終変更時刻と find の開始時刻との差がちょうど n 単位であれば、この一次式は真と評価されます。サポートされる時間単位については、-atime 一次式の説明を参照してください。

-d

depth の移植性のない BSD 固有版です。GNU find は FreeBSD の find を誤って模倣し、これを一次式として実装しています。

-delete

見つかったファイルやディレクトリを削除します。常に真を返します。find がツリーを再帰的に降りる際、これは現在の作業ディレクトリを基準に実行されます。セキュリティ上の理由から、「.」からの相対パス名に「/」文字を含むファイル名は削除しようとしません。このオプションは深さ優先の走査処理を暗黙に指定します。ディレクトリが空でなければ、-delete 一次式による削除は失敗します。シンボリックリンクをたどる動作は、このオプションと併用できません。

WARNING: -delete 一次式は、評価されると直ちに現在のパスの削除を試みます。式内での位置に注意してください。一般的には、ほぼ常に最後に置くべきです。確信がない場合は、まず -delete の代わりに -print を指定して実行してみてください。評価順序の詳細については、後述の OPERATORS を参照してください。

-depth

常に真です。移植性のない -d オプションと同じです。find に深さ優先走査を行わせます。つまり、ディレクトリは後順(post-order)で訪問され、そのディレクトリ内のすべてのエントリがディレクトリ自体より先に処理されます。既定では、find はディレクトリを前順(pre-order)、つまりその内容より先に訪問します。なお、既定の動作は幅優先走査ではありません(not)。

-depth 一次式は、通常とは異なるアクセス権を持つディレクトリ内のファイルを処理するために find を cpio(1) とともに使用する場合に役立ちます。これにより、ファイルをディレクトリへ配置している間は書き込み権限が確保され、最後にディレクトリのアクセス権が設定されます。

-depth n

走査の開始点を基準としたファイルの深さが n であれば真です。

-empty

現在のファイルまたはディレクトリが空であれば真です。

-exec utility [argument ...] ;

utility という名前のプログラムが終了ステータスとしてゼロを返せば真です。省略可能な arguments をユーティリティへ渡せます。式はセミコロン(「;」)で終端しなければなりません。シェルから find を起動する際、シェルがセミコロンを制御演算子として扱う場合は、セミコロンを引用符で囲む必要があります。文字列「{}」がユーティリティ名または引数内のどこかに現れると、現在のファイルのパス名に置き換えられます。Utility は、find が実行されたディレクトリから実行されます。Utility と arguments には、シェルのパターンや構文による追加の展開は行われません。

-exec utility [argument ...] {} +

-exec と同じですが、utility を呼び出すたびに「{}」が可能な限り多くのパス名に置き換えられます。この動作は xargs(1) と同様です。この一次式は常に真を返します。ただし、utility の呼び出しが 1 回でもゼロ以外の終了ステータスを返した場合、find はゼロ以外の終了ステータスを返します。

-execdir utility [argument ...] ;

-execdir 一次式は -exec 一次式と同じですが、utility が現在のファイルを格納するディレクトリから実行される点だけが異なります。文字列「{}」の代わりに使用されるファイル名には、ディレクトリ部分が付きません。

-execdir utility [argument ...] {} +

-execdir と同じですが、utility を呼び出すたびに「{}」が可能な限り多くのパス名に置き換えられます。この動作は xargs(1) と同様です。この一次式は常に真を返します。ただし、utility の呼び出しが 1 回でもゼロ以外の終了ステータスを返した場合、find はゼロ以外の終了ステータスを返します。

-flags [-|+]flags,notflags

フラグはシンボル名で指定します(chflags(1) を参照)。「no」という接頭辞が付くもの(「nodump」を除く)は notflags と呼ばれます。flags 内のフラグについては設定されていることを、notflags 内のフラグについては設定されていないことを検査します。これは、設定されているモードビットだけをユーザーが指定できる -perm とは異なることに注意してください。

フラグの前にダッシュ(「-」)がある場合、ファイルのフラグビットで flags のすべてのビットが少なくとも設定され、notflags のビットが 1 つも設定されていなければ、この一次式は真と評価されます。フラグの前にプラス(「+」)がある場合、ファイルのフラグビットで flags のビットのいずれかが設定されているか、notflags のビットのいずれかが設定されていなければ、この一次式は真と評価されます。それ以外の場合、flags のビットがファイルのフラグビットと正確に一致し、かつ flags のビットが notflags のビットと 1 つも一致しなければ、この一次式は真と評価されます。

-fstype type

ファイルが type タイプのファイルシステムに含まれていれば真です。システムで利用できるファイルシステムのタイプは、lsvfs(1) コマンドで確認できます。さらに、「local」と「rdonly」という 2 つの疑似タイプがあります。前者は find が実行されているシステム上に物理的にマウントされたすべてのファイルシステムに一致し、後者は読み取り専用でマウントされたすべてのファイルシステムに一致します。

-gid gname

GNU find との互換性のための -group gname と同じものです。GNU find では gname が数値でなければならないという制限がありますが、find にはありません。

-group gname

ファイルがグループ gname に属していれば真です。gname が数値であり、その名前のグループが存在しない場合、gname はグループ ID として扱われます。

-ignore_readdir_race

ディレクトリから名前を読み取った後にファイルまたはディレクトリが削除されたことによるエラーを無視します。このオプションは、開始点で発生するエラーには影響しません。

-ilname pattern

-lname と同様ですが、大文字と小文字を区別せずに照合します。これは GNU find の拡張機能です。

-iname pattern

-name と同様ですが、大文字と小文字を区別せずに照合します。

-inum n

ファイルの inode 番号が n であれば真です。

-ipath pattern

-path と同様ですが、大文字と小文字を区別せずに照合します。

-iregex pattern

-regex と同様ですが、大文字と小文字を区別せずに照合します。

-iwholename pattern

GNU find との互換性のための -ipath と同じものです。

-links n

ファイルに n 個のリンクがあれば真です。

-lname pattern

-name と同様ですが、ファイル名ではなくシンボリックリンクの内容を照合します。シンボリックリンクをたどる場合、これはリンク切れのシンボリックリンクにのみ一致することに注意してください。これは GNU find の拡張機能です。

-ls

この一次式は常に真と評価されます。現在のファイルについて、inode 番号、512 バイトブロック単位のサイズ、ファイルアクセス権、ハードリンク数、所有者、グループ、バイト単位のサイズ、最終変更時刻、およびパス名を標準出力へ書き出します。ファイルがブロック特殊ファイルまたはキャラクタ特殊ファイルの場合、バイト単位のサイズの代わりにデバイス番号を表示します。ファイルがシンボリックリンクの場合、「->」に続けてリンク先ファイルのパス名を表示します。形式は「ls -dgils」が生成するものと同一です。

-maxdepth n

常に真です。コマンドライン引数から下へ最大 n ディレクトリレベルまで降ります。-maxdepth 一次式が 1 つでも指定されると、通常なら評価されない場合でも式全体に適用されます。「-maxdepth 0」を指定すると、検索全体がコマンドライン引数だけに制限されます。

-mindepth n

常に真です。n 未満のレベルにはテストもアクションも適用しません。-mindepth 一次式が 1 つでも指定されると、通常なら評価されない場合でも式全体に適用されます。「-mindepth 1」を指定すると、コマンドライン引数以外のすべてを処理します。

-mmin [-|+]n

ファイルの最終変更時刻と find の開始時刻との差を 1 分単位で切り上げた値が、n 分より大きい(+n)、n 分より小さい(-n)、またはちょうど n 分であれば真です。

-mnewer file

-newer と同じです。

-mount

GNU find との互換性のための -xdev と同じものです。

-mtime n[smhdw]

単位を指定しない場合、ファイルの最終変更時刻と find の開始時刻との差を 24 時間単位で切り上げた値が n 個の 24 時間単位であれば、この一次式は真と評価されます。

単位を指定した場合、ファイルの最終変更時刻と find の開始時刻との差がちょうど n 単位であれば、この一次式は真と評価されます。サポートされる時間単位については、-atime 一次式の説明を参照してください。

-name pattern

検査対象のパス名の最後の構成要素が pattern に一致すれば真です。シェルの特殊なパターン照合文字(「[」、「]」、「*」、「?」)を pattern の一部として使用できます。これらの文字は、バックスラッシュ(「\」)でエスケープすると明示的に照合できます。

-newer file

現在のファイルの最終変更時刻が file より新しければ真です。

-newerXY file

現在のファイルの最終アクセス時刻(X=a)、inode 作成時刻(X=B)、状態変更時刻(X=c)、または内容変更時刻(X=m)が、file の最終アクセス時刻(Y=a)、inode 作成時刻(Y=B)、状態変更時刻(Y=c)、または内容変更時刻(Y=m)より新しければ真です。さらに、Y=t の場合、file は代わりに ISO 8601 または RFC 822 が解釈できる形式の直接的な日時指定として扱われます。-newermm は -newer と同等であることに注意してください。

-nogroup

ファイルが不明なグループに属していれば真です。

-noignore_readdir_race

-ignore_readdir_race の効果を無効にします。これが既定の動作です。

-noleaf

このオプションは GNU find との互換性のために用意されています。GNU find では find に関係のない最適化を無効にするため、このオプションは無視されます。

-nouser

ファイルが不明なユーザーに属していれば真です。

-ok utility [argument ...] ;

-ok 一次式は -exec 一次式と同じですが、find が端末へメッセージを表示して応答を読み取り、utility の実行についてユーザーに確認を求める点が異なります。応答が肯定(「POSIX」ロケールでは「y」)でない場合、コマンドは実行されず、-ok 式の値は偽になります。

-okdir utility [argument ...] ;

-okdir 一次式は、-ok 一次式について説明したものと同じ例外を除き、-execdir 一次式と同一です。

-path pattern

検査対象のパス名が pattern に一致すれば真です。シェルの特殊なパターン照合文字(「[」、「]」、「*」、「?」)を pattern の一部として使用できます。これらの文字は、バックスラッシュ(「\」)でエスケープすると明示的に照合できます。スラッシュ(「/」)は通常の文字として扱われ、明示的に照合する必要はありません。

-perm [-|+]mode

mode には、シンボル表記(chmod(1) を参照)または 8 進数を指定できます。mode がシンボル表記の場合、開始値はゼロと仮定され、mode はプロセスのファイルモード作成マスクに関係なくアクセス権を設定または解除します。mode が 8 進数の場合、ファイルのモードビットのうち 07777(S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO)のビットだけが比較に使われます。mode の前にダッシュ(「-」)がある場合、ファイルのモードビットで mode のすべてのビットが少なくとも設定されていれば、この一次式は真と評価されます。mode の前にプラス(「+」)がある場合、ファイルのモードビットで mode のビットのいずれかが設定されていれば、この一次式は真と評価されます。それ以外の場合、mode のビットがファイルのモードビットと正確に一致すれば、この一次式は真と評価されます。シンボル表記のモードの先頭文字をダッシュ(「-」)にすることはできない点に注意してください。

-print

この一次式は常に真と評価されます。現在のファイルのパス名を標準出力へ出力します。-exec、-ls、-print、-print0、-ok のいずれも指定されていない場合、与えられた式は実質的に ( given expression ) -print に置き換えられるものとします。

-print0

この一次式は常に真と評価されます。現在のファイルのパス名を標準出力へ出力し、その後に ASCII NUL 文字(文字コード 0)を出力します。

-prune

この一次式は常に真と評価されます。find が現在のファイル以下へ降りないようにします。-d オプションが指定されている場合、-prune 一次式は効果がないことに注意してください。

-quit

find を直ちに終了させます。

-regex pattern

ファイルのパス全体が、正規表現を使って pattern に一致すれば真です。「./foo/xyzzy」という名前のファイルに一致させるには、正規表現「.*/[xyz]*」または「.*/foo/.*」を使用できますが、「xyzzy」や「/foo/」は使用できません。

-samefile name

ファイルが name へのハードリンクであれば真です。コマンドオプション -L が指定されている場合、ファイルが name を指すシンボリックリンクであっても真です。

-size n[ckMGTP]

ファイルのサイズを 512 バイトブロック単位に切り上げた値が n であれば真です。n の後に c が続く場合、ファイルのサイズが n バイト(文字)であれば、この一次式は真です。同様に、n の後に倍率指定子が続く場合、ファイルのサイズは次のように換算した n と比較されます。

k

キロバイト(1024 バイト)

M

メガバイト(1024 キロバイト)

G

ギガバイト(1024 メガバイト)

T

テラバイト(1024 ギガバイト)

P

ペタバイト(1024 テラバイト)

-sparse

現在のファイルがスパース、すなわちバイト単位のサイズから予想されるより少ない数のブロックしか割り当てられていなければ真です。ファイルシステムによって圧縮されたファイルにも一致することがあります。

-type t

ファイルが指定されたタイプであれば真です。指定できるファイルタイプは次のとおりです。

b

ブロック特殊ファイル

c

キャラクタ特殊ファイル

d

ディレクトリ

f

通常ファイル

l

シンボリックリンク

p

FIFO

s

ソケット

-uid uname

GNU find との互換性のための -user uname と同じものです。GNU find では uname が数値でなければならないという制限がありますが、find にはありません。

-user uname

ファイルがユーザー uname に属していれば真です。uname が数値であり、その名前のユーザーが存在しない場合、uname はユーザー ID として扱われます。

-wholename pattern

GNU find との互換性のための -path と同じものです。

-xattr

ファイルに拡張属性が 1 つでもあれば真です。

-xattrname name

ファイルに、name という名前の拡張属性があれば真です。

一次式は、次の演算子を使用して組み合わせられます。演算子は優先順位の高い順に示します。

( expression )

括弧内の式が真と評価されれば、これは真と評価されます。

! expression
-not expression

これは単項 NOT 演算子です。式が偽であれば真と評価されます。

-false

常に偽です。

-true

常に真です。

expression -and expression
expression expression

-and 演算子は論理 AND 演算子です。2 つの式を並べることで暗黙に指定されるため、明示的に指定する必要はありません。両方の式が真であれば、式全体は真と評価されます。最初の式が偽の場合、2 番目の式は評価されません。

expression -or expression

-or 演算子は論理 OR 演算子です。最初または 2 番目の式のいずれかが真であれば、式全体は真と評価されます。最初の式が真の場合、2 番目の式は評価されません。

すべてのオペランドと一次式は、find に対する個別の引数でなければなりません。引数を取る一次式では、その各引数も find に対する個別の引数であることが要求されます。

LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_TIME の各環境変数は、environ(7) に記載されているとおり find ユーティリティの実行に影響します。

以下の例は、シェルへ渡すとおりの形式で示しています。

find / \! -name "*.c" -print

名前が .c で終わらないすべてのファイルの一覧を出力します。

find / -newer ttt -user wnj -print

ファイル ttt より新しく、ユーザー「wnj」が所有するすべてのファイルの一覧を出力します。

find / \! \( -newer ttt -user wnj \) -print

ttt より新しいことと「wnj」が所有することの両方を満たすわけではない、すべてのファイルの一覧を出力します。

find / \( -newer ttt -or -user wnj \) -print

「wnj」が所有するか、ttt より新しいすべてのファイルの一覧を出力します。

find / -newerct '1 minute ago' -print

inode の状態変更時刻が、現在時刻の 1 分前より新しいすべてのファイルの一覧を出力します。

find / -type f -exec echo {} \;

echo(1) コマンドを使用して、すべてのファイルの一覧を出力します。

find -L /usr/ports/packages -type l -exec rm -- {} +

/usr/ports/packages 内のリンク切れのシンボリックリンクをすべて削除します。

find /usr/src -name CVS -prune -o -depth +6 -print

作業ディレクトリ /usr/src 内で、深さが 7 レベル以上のファイルとディレクトリを検索します。

find /usr/src -name CVS -prune -o -mindepth 7 -print

深さ 7 未満のレベルでは -prune が評価されないため、前の例とは同等ではありません。

-follow 一次式は非推奨です。代わりに -L オプションを使用してください。詳細については、後述の STANDARDS セクションを参照してください。

chflags(1)、chmod(1)、locate(1)、lsvfs(1)、whereis(1)、which(1)、xargs(1)、stat(2)、acl(3)、fts(3)、getgrent(3)、getpwent(3)、strmode(3)、ascii(7)、re_format(7)、symlink(7)

find ユーティリティの構文は、IEEE Std 1003.1-2001(「POSIX.1」)規格で規定された構文の上位集合です。

-H と -L を除くすべての 1 文字オプション、ならびに -amin、-anewer、-cmin、-cnewer、-delete、-empty、-fstype、-iname、-inum、-iregex、-ls、-maxdepth、-mindepth、-mmin、-not、-path、-print0、-regex、-sparse、および birthtime に関係するすべての -B* 一次式は、IEEE Std 1003.1-2001(「POSIX.1」)に対する拡張です。

歴史的には、-d、-L、-x オプションは、それぞれ一次式 -depth、-follow、-xdev を使って実装されていました。これらの一次式は常に真と評価されていました。実際には走査開始前に効果を生じるグローバル変数であったため、正当な式でも予期しない結果になることがありました。その一例が式 -print -o -depth です。-print は常に真と評価されるため、標準の評価順序からは -depth が決して評価されないことになります。しかし、実際はそうではありません。

演算子 -or は -o として、演算子 -and は -a として実装されていました。

歴史的な実装の -exec および -ok 一次式では、文字列「{}」の前後に空白以外の文字があると、その文字列をユーティリティ名またはユーティリティ引数内で置換しませんでした。このバージョンでは、ユーティリティ名または引数内のどこに現れても置換します。

-E オプションは、同等の grep(1) および sed(1) オプションから着想を得ています。

単純な find コマンドは Version 1 AT&T UNIX で登場し、Version 3 AT&T UNIX で削除されました。Version 5 AT&T UNIX 用に書き直され、その後 Programmer's Workbench(PWB)向けに拡張されました。これらの変更は、後に Version 7 AT&T UNIX に取り込まれました。

find が使用する特殊文字は、多くのシェルプログラムにとっても特殊文字です。特に、「*」、「[」、「]」、「?」、「(」、「)」、「!」、「\」、「;」の各文字は、シェルからエスケープする必要がある場合があります。

オプションとファイル名の間、およびファイル名と expression の間を区切る区切り文字がないため、-xdev または ! という名前のファイルを指定することは困難です。これらの問題には、-f オプションと getopt(3) の「--」構文で対処します。

-delete 一次式は、ファイルシステムツリーの走査オプションを変更する他のオプションとうまく連携しません。

-mindepth および -maxdepth 一次式は、実際には(前述のとおり)グローバルオプションです。オプションらしい形式のオプションに置き換えるべきでしょう。