日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
FIND(1) FreeBSD 一般コマンドマニュアル FIND(1)
名称
find - ディレクトリツリーを再帰的に下ってファイルを捜す
書式
find [-H | -L | -P] [-EXdsx] [-f pathname] [pathname ...] expression
解説
find ユーティリティは、 pathname に対してディレクトリツリーを再帰的に下っ
て、ツリー上の各ファイルについて expression (後に示す ``プライマリ'' と
``演算子'' から構成されます) で指定された処理を実行します。
オプションとしては以下のものがあります:
-E -regex および -iregex のオプションの後の正規表現を、基本正規表現
(BRE) の代りに拡張 (最近の) 正規表現として解釈します。
re_format(7) マニュアルページは、両方のフォーマットを完全に解説し
ています。
-H file で指定したファイルがシンボリックリンクファイルだった場合、シ
ンボリックリンク自体ではなく、リンク先のファイルに関してファイル
情報とファイルタイプ ( stat(2) 参照) を使って expression の処理を
するように指定します。もしリンク先のファイルがなければ、シンボ
リックリンク自体を処理の対象とします。コマンドラインからの file
で直接指定されたのではなく、ディレクトリツリー上で見つかったシン
ボリックリンクファイルに関しては、シンボリックリンク自体を処理の
対象とします。
-L file で指定したファイルがシンボリックリンクファイルだった場合、シ
ンボリックリンク自体ではなく、リンク先のファイルに関してファイル
情報とファイルタイプ ( stat(2) 参照) を使って expression の処理を
するように指定します。もしリンク先のファイルがなければ、シンボ
リックリンク自体を処理の対象とします。
-P シンボリックリンク自体に関してファイル情報とファイルタイプ (
stat(2) 参照) を使って expression の処理をするように指定します。
これがデフォルトです。
-X xargs(1) と組み合わせて使うときのため、より安全に動作するようにし
ます。もし xargs(1) によりデリミタ文字 (シングルクォート (`` '
'') 、ダブルクォート (`` " '') 、バックスラッシュ (``\'') 、ス
ペース、タブ、改行) が含まれるファイル名が使われた場合、診断メッ
セージを標準エラー出力に表示して、そのファイル名をスキップしま
す。
ちゃんと動作する代案として、 -print0 プライマリを ``xargs -0'' と
共に使用することを検討すると良いかもしれません。
-d ファイルに対する処理順序を深さ優先の探索方式にします。すなわち、
ディレクトリ自体に対する処理を行う前に、ディレクトリ内の個々の
ファイルに対して処理を実行します。デフォルトでは、ディレクトリは
最初に処理されます。 (デフォルトの方式は幅優先探索方式では ないで
す。)
-f file
明示的にファイルを指定します。ファイル名の先頭が ``-'' で始まって
いたり、あとで述べる expression の指定と混同してしまうようなファ
イル名を指定したりするときに使用します。 (ファイルはオプション直
後のオペランドとしても指定可能です。)
-s 辞書編集上の順に、すなわち各ディレクトリ内においてアルファベット
順に、ファイル階層を find に辿らせます。注: `find -s' と `find |
sort' は異なった結果となる場合があります。
-x ディレクトリツリーを下って行くとき、最初に file のあったファイル
システムとは異なるファイルシステム上のファイルに対する処理になる
場合は、実行しないようにします。
プライマリ
-amin n
最後にファイルがアクセスされた時刻と、 find を起動した時刻との差
(1 分単位で切り上げます) が n 分であれば、真とします。
-anewer file
-neweram と同じです。
-atime n[smhdw]
単位を指定しない場合、最後にファイルがアクセスされた時刻と、 find
を起動した時刻との差 (24 時間単位で切り上げます) が n 日であれ
ば、真とします。
単位を指定する場合、最後にファイルがアクセスされた時刻と、 find
を起動した時刻との差が正確に n 単位であれば、真とします。可能な時
間の単位は次の通りです:
s 秒
m 分 (60 秒)
h 時間 (60 分)
d 日 (24 時間)
w 週 (7 日)
いくつもの単位を組み合わせて 1 個の -atime 引数に使用可能であり、
例えば ``-atime -1h30m'' とできます。単位指定は、 + または - の修
正子と組み合わせた場合のみ、おそらく有用でしょう。
-cmin n
最後にファイルのステータスが修正された時刻と、 find を起動した時
刻との差 (1 分単位で切り上げます) が n 分であれば、真とします。
-cnewer file
-newercm と同じです。
-ctime n[smhdw]
単位を指定しない場合、最後にファイルのステータスが変更された時刻
と、 find を起動した時刻の差 (24 時間単位で切り上げます) が n 日
であれば、真とします。単位を指定する場合、最後にファイルのステー
タスが変更された時刻と、 find を起動した時刻との差が正確に n 単位
であれば、真とします。サポートされている時間の単位については、
-atime プライマリの記述を参照してください。
-delete
見付けたファイルやディレクトリを消去します。常に真を返します。現
在の作業ディレクトリから find は再帰的にディレクトリツリーを下り
ます。セキュリティ上の理由から、 ``.'' からの相対パス名に ``/''
文字を含むファイル名のファイルを消去しようとはしません。このオプ
ションにより暗示的に深さ優先の処理が指定されます。
-depth 常に真です。 -d オプションと同じです。 find を cpio(1) と共に使用
する場合、普通ではないパーミッションのディレクトリ中のファイルを
処理するために、 -depth が有用です。
-empty 現在のファイルまたはディレクトリが空の場合、真となります。
-exec utility [argument ...] ;
utility で指定した名前のプログラムを実行し、終了コードが 0 の場
合、真とします。 argument は、utility への引数として渡されます。
この指定は、最後に必ずセミコロン (``;'') をつけてください。 find
をシェルから起動する場合、そのシェルがセミコロンを制御オペレータ
と解釈する場合には、セミコロンをクォートする必要があるかもしれま
せん。 utility もしくは argument の指定のなかで ``{}'' が使われて
いた場合は、その部分が、現在 find が対象としているファイルのパス
名に置き換えられます。ただし、 utility が実行されるときのカレント
ディレクトリは、 find が起動されたディレクトリのままです。
utility と arguments は、シェルのパターンと構造の更なる展開対象と
はなりません。
-exec utility [argument ...] {} +
-exec と同じですが、各 utility の起動において ``{}'' はなるべく多
くのパス名と置き換えられます。この動作は xargs(1) のものに似てい
ます。
-execdir utility [argument ...] ;
-execdir プライマリは -exec プライマリと同様ですが、 utility が現
在のファイルを持つディレクトリにおいて実行される点が異なります。
文字列 ``{}'' に対して置換されるファイル名は適切ではありません。
-flags [-|+]flags,notflags
フラグは、シンボル名 ( chflags(1) 参照) で指定します。フラグの前
に "no" を付けると ( "nodump" は除きます)、 notflags と呼ばれま
す。 flags にあるフラグは設定されていることが検査され、 notflags
にあるフラグは設定されていないことが検査されます。これは、設定さ
れているモードビットのみをユーザが指定可能な -perm とは異なること
に注意してください。
フラグの前にダッシュ (``-'') が付く場合、このプライマリは、ファイ
ルのフラグビットのうち少なくとも flags 中の全ビットが設定されてい
て、 notflags 中のどのビットも設定されていない場合に真になりま
す。フラグの前にプラス (``+'') が付く場合、このプライマリは、ファ
イルのフラグビットのうち flags のいずれかのビットが設定されている
か、 notflags のいずれかのビットが設定されていない場合に真になり
ます。どちらでもない場合、このプライマリは、 flags のビットがファ
イルのフラグビットに完全に適合し、 flags のいずれもが notflags に
適合しない場合に真になります。
-fstype type
対象ファイルが格納されているファイルシステムのタイプが、 type で
指定されたものである場合に真となります。 sysctl(8) コマンドを使用
して、システム上で利用可能なファイルシステムタイプを調べることが
できます:
sysctl vfs
さらに、2 つの 擬似タイプ ``local'' と ``rdonly'' があります。前
者は、 find を実行しているシステム上に物理的にマウントされている
ファイルシステムです。後者は、読み取り専用でマウントされている
ファイルシステムです。
-group gname
ファイルが gname で指定したグループに属している場合、真になりま
す。 gname が数字で、そのようなグループ名がない場合は、 gname を
グループ ID として扱います。
-iname pattern
-name に似ていますが、大文字小文字を区別せずにマッチします。
-inum n
ファイルの inode 番号が n なら、真になります。
-ipath pattern
-path に似ていますが、大文字小文字を区別せずにマッチします。
-iregex pattern
-regex に似ていますが、大文字小文字を区別せずにマッチします。
-links n
ファイルのリンク数が n なら、真になります。
-ls このプライマリは常に真になります。対象となっているファイルの情報
を標準出力に出力します。出力する内容は inode 番号、 512 バイトブ
ロックでのファイルの大きさ、ファイルのパーミッション、ハードリン
クの数、所有者、グループ、バイトで表したファイルの大きさ、最後に
ファイルが修正された時刻、パス名です。ファイルがブロック型もしく
はキャラクタ型の特殊ファイルならば、バイトで表したファイルの大き
さの代わりにメジャー番号とマイナー番号を出力します。ファイルがシ
ンボリックリンクならば、 ``->'' の後にリンク先のファイルのパス名
を表示します。フォーマットは ls -dgils の出力結果と同じです。
-maxdepth n
現在のファイルのツリーにおける深さが n 以下である場合、真になりま
す。
-mindepth n
現在のファイルのツリーにおける深さが n 以上である場合、真になりま
す。
-mmin n
最後にファイルが修正された時刻と、 find を起動した時刻との差 (1
分単位で切り上げます) が n 分であれば、真とします。
-mnewer file
-newer と同じです。
-mtime n[smhdw]
単位を指定しない場合、最後にファイルが修正された時刻と、 find を
起動した時刻との差(24 時間単位で切り上げます)が n 日であれば、真
とします。単位を指定する場合、最後にファイルが修正された時刻と、
find を起動した時刻との差が正確に n 単位であれば、真とします。サ
ポートされている時間の単位については、 -atime プライマリの記述を
参照してください。
-name pattern
対象ファイルのパス名の最後のファイル名部分が pattern で指定したも
のとマッチするかどうかを調べ、マッチした場合は真になります。
pattern としては、シェルで使われるパターンマッチ指定 ( ``['',
``]'', ``*'', ``?'') を使用することができます。これらの文字はバッ
クスラッシュ (``\'') を前において、パターンマッチ指定ではなく文字
として扱う事を明示することができます。
-newer file
対象ファイルの修正日付が、 file で指定したファイルのものより新し
い場合は、真になります。
-newerXY file
現在のファイルの最終アクセス時刻 (X=a) ・ステータス修正時刻 (X=c)
・内容修正時刻 (X=m) が、 file の最終アクセス時刻 (Y=a) ・ステー
タス修正時刻 (Y=c) ・内容修正時刻 (Y=m) より新しい場合は、真とな
ります。さらに Y=t の場合、 file は代りに、 cvs(1) が理解する直接
的な時刻指定として解釈されます。 -newermm は -newer と同じである
ことに注意してください。
-nogroup
対象ファイルのグループが unknown の場合、真になります。
-nouser
対象ファイルの所有者が unknown の場合、真になります。
-ok utility [argument ...] ;
-ok プライマリは exec とほぼ同じですが、 utility を実行するかどう
かの確認をユーザに求め、端末にメッセージを出力します。 ``y'' 以外
の返答をした場合は、コマンドは実行されず、 -ok 式の値は偽になりま
す。
-okdir utility [argument ...] ;
-okdir プライマリは、 -execdir プライマリと同様ですが、 -ok プラ
イマリの解説に該当する部分が異なります。
-path pattern
対象ファイルのパス名が、 pattern で指定したものとマッチするかどう
かを調べます、マッチした場合は真になります。 pattern としては、
シェルで使われるパターンマッチ指定 ( ``['', ``]'', ``*'', ``?'')
を使用することができます。これらの文字はバックスラッシュ (``\'')
を前において、パターンマッチ指定ではなく文字として扱う事を明示す
ることができます。 (``/'') は、そのままパスのディレクトリの区切り
にマッチします。
-perm [-|+]mode
ファイルのモードを、 mode と比較します。 mode は、シンボル形式 (
chmod(1) 参照) もしくは 8 進数形式で指定します。 mode がシンボル
形式の場合は、 mode は 00000 から開始してパーミッションのセットと
クリアを行います。 (プロセスのファイル生成マスクとは無関係です。)
mode が 8 進数形式の場合は、ファイルのモードビットのうち、07777
(S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) の部
分が比較対象になります。 mode の最初にダッシュ (``-'') を指定した
場合は、 mode でセットされているすべてのビットがファイルのモード
でもセットされていれば、このプライマリは真となります。 mode の最
初にプラス (``+'') を指定した場合は、 mode でセットされているビッ
トのどれかがファイルのモードでもセットされていれば、このプライマ
リは真となります。どちらでもない場合、ファイルのモードと mode が
完全に一致した場合にのみ真となります。なお、シンボル形式でモード
指定をする場合は、少なくとも最初がダッシュ (``-'') にならないよう
にする必要があります。
-print このプライマリは常に真になります。対象となっているファイルのパス
名を標準出力に出力して改行します。 -exec, -ls, -print0, -ok のど
のプライマリも指定されなかった場合は、与えられた式 given expres
sion は ( given expression ) -print で置き換えられます。
-print0
-print とほぼ同じですが、標準出力に対象となっているファイルのパス
名を出力したあと、改行ではなく、 ASCII NUL 文字 (文字コード 0) を
出力します。
-prune このプライマリは常に真になります。対象となっているファイル配下の
ディレクトリに下りないようにします。 -d オプションが指定されてい
る場合は、 -prune の指定は無効になります。
-regex pattern
ファイルのパス全体が、正規表現 pattern にマッチする場合、真になり
ます。ファイル名 ``./foo/xyzzy'' にマッチさせるには、正規表現
``.*/[xyz]*'' や ``.*/foo/.*'' が使えますが、 ``xyzzy'' や
``/foo/'' は使えません。
-size n[c]
ファイルサイズを 512 バイトのブロック単位で数えたとき (端数は切り
上げ)、 n ブロックであれば真になります。 n のあとに c が指定され
ていた場合は、ファイルサイズが n バイト (文字) であれば真になりま
す。
-type t
ファイルタイプが t で指定されたタイプに一致すれば真になります。タ
イプとして、次のような指定が可能です:
b ブロック型特殊ファイル
c キャラクタ型特殊ファイル
d ディレクトリ
f 普通のファイル
l シンボリックリンク
p FIFO
s ソケット
-user uname
ファイルの所有者が、 uname で指定されたユーザと一致すれば真になり
ます。もし uname が数字で、そのようなユーザ名がなければ、ユーザ
ID が指定されたものとして扱います。
なお、数字を引数にとるプライマリは、数字の前にプラス (``+'') およびマイナ
ス (``-'') をつけることができます。それぞれ ``n より大'' および ``n より
小'' の意味になり、 ``正確に n'' という意味ではなくなります。
演算子
以下の演算子を使って、プライマリを組み合わせることができます。演算子は優
先度が下がる順番で示されています。
( expression ) もし、括弧内の expression が真なら、真になります。
! expression
-false expression
-not expression
単項否定演算子 ( NOT ) です。 expression が偽なら、真とな
ります。
expression1 -and expression2
expression1 expression2
論理積 ( AND ) 演算子です。 expression1 と expression2 の
両方とも真のとき、真になります。もし expression1 が偽な
ら、 expression2 は実行されません。 -and を書かずに、単に
2 つの expression を並べて
expression1 expression2
と書いても同じです。
expression1 -or expression2
論理和 ( OR ) 演算子です。 expression1 か expression2 の
どちらか一方でも真であれば、真になります。もし
expression1 が真なら、 expression2 は実行されません。
使用例
コマンドラインからのタイプ例です。
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
ttt というファイルより新しいか、所有者が ``wnj'' である、全ファイ
ルを表示します。
find . -newerct '1 minute ago' -print
inode 修正時刻が現在から 1 分以内の全ファイルを表示します。
関連項目
chflags(1), chmod(1), cvs(1), locate(1), whereis(1), which(1), xargs(1),
stat(2), fts(3), getgrent(3), getpwent(3), strmode(3), re_format(7),
symlink(7)
規格
find ユーティリティの文法は IEEE Std 1003.2 (``POSIX.2'') の仕様で決めら
れた文法のスーパセットです。全 1 文字オプションと -iname, -inum, -print0,
-delete, -ls, -regex のプライマリは IEEE Std 1003.2 (``POSIX.2'') の拡張
です。
昔は -d, -h, -x のオプションはそれぞれ -depth, -follow, -xdev のプライマ
リを用いて実装されていました。これらのプライマリは常に真に評価されていま
した。これらのプライマリは探索が始まる前に効果を与える本当のグローバル変
数であったので、いくつかの合法的な expression が予期しない結果となりまし
た。一例として -print -o -depth の expression があります。 -print が常に
真に評価されるため標準の評価の順番では -depth は決して評価されないはずで
すが、そうではありませんでした。
演算子の -or は -o として実装されていました。演算子の -and は -a として実
装されていました。
昔の実装では exec と -ok のプライマリでは、 tility 名やその引数中におい
て、空白以外の文字が前後に続く ``{}'' を置き換えませんでした。このバー
ジョンでは utility 名やその引数のどの場所に ``{}'' が現れても置き換えま
す。
-E オプションは、 grep(1) および sed(1) の類推から実装されました。
バグ
find によって使われる特殊文字は多くのシェルにとっても特殊文字です。特に
``*'', ``['', ``]'', ``?'', ``('', ``)'', ``!'', ``\'', ``;'' は、シェル
からエスケープされなくてはならないでしょう。
オプションとファイル名との間およびファイル名と expression との間を区切る
デリミタが存在しませんので、ファイル名にオプションと間違えるようなもの (
-xdev のようなもの) や、 expression と間違えるようなもの ( ! のようなも
の) を指定することは難しいです。このようなファイル名を指定する場合は -f
オプションを使うか、 getopt(3) で使われるオプション指定の終了記号 ``--''
を使用します。
-delete プライマリは、ファイルシステムツリーの検索順序に影響する他のオプ
ションとは十分には連係しません。
歴史
find コマンドは Version 1 AT&T UNIX から登場しました。
FreeBSD 4.9 May 3, 2001 FreeBSD 4.9