スポンサーリンク

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
コマンド行で指定したシンボリックリンクそれぞれに対するファイル情 報とファイルタイプ ( stat(2) 参照) は、シンボリックリンク自体では なく、リンク先のファイルのものとなるようにします。もしリンク先の ファイルがなければ、シンボリックリンク自体のものを使用します。コ マンド行で直接指定されたのではないシンボリックリンクのファイル情 報は、シンボリックリンク自体のものを使用します。

−L
シンボリックリンクそれぞれに対するファイル情報とファイルタイプ ( stat(2) 参照) は、シンボリックリンク自体ではなく、リンク先のファ イルのものとなるようにします。もしリンク先のファイルがなければ、 シンボリックリンク自体のものを使用します。

このオプションは、もはや推奨されない -follow プライマリと等価で す。

−P
シンボリックリンクそれぞれに対するファイル情報とファイルタイプ ( stat(2) 参照) は、シンボリックリンク自体のものとなるようにしま す。これがデフォルトです。

−X
xargs(1) と組み合わせた際に find を安全に使えるようにします。 xargs(1) がデリミタ文字として扱う文字がファイル名に含まれる場合、 診断メッセージを標準エラー出力に表示して、そのファイルをスキップ します。デリミタ文字は、クォート (‘‘ ’ ’’) 、ダブルクォート (‘‘ " ’’) 、バックスラッシュ (‘‘\’’) 、スペース、タブ、改行文字がありま す。

効果的な代案として、 −print0 プライマリを ‘‘xargs −0’’ と共に使用 することを検討すると良いかもしれません。

−d
ファイルに対する処理順序を深さ優先の探索方式にします。すなわち、 ディレクトリ自体に対する処理を行う前に、ディレクトリ内の個々の ファイルに対して処理を実行します。デフォルトでは、ディレクトリは 最初に処理されます。デフォルトの方式は幅優先探索方式では ないこと に注意して下さい。

このオプションは IEEE Std 1003.1-2001 (‘‘POSIX.1’’) の -depth プ ライマリと等価です。 −d は、 findcpio(1) とともに使用する場 合、 cpio(1) が通常でないパーミッションを持つディレクトリに存在す るファイルを処理する際に有益です。このオプションにより、ファイル をディレクトリに置いている間は書き込み許可が保持され、その後、最 後にディレクトリのパーミッションが設定されることが保証されます。

−f
find
が探索するファイル階層を指定します。ファイル階層は、本オプ ションの直後にオペランドとして続けて指定することもできます。

−s
find
がファイル階層を探索する際に、辞書編集上の順に、すなわち各 ディレクトリ内においてアルファベット順に、辿らせるようにします。 注: ‘find -s’ と ‘find | sort’ とは異なった結果となる場合がありま す。

−x
ディレクトリツリーを下って行くとき、下り始めのファイルが存在する デバイスのデバイス番号と異なるデバイス番号を持つディレクトリには 下らないようにします。

このオプションは、廃止された -xdev プライマリと同等のものです。

プライマリ

       -acl

他のオプションと組み合わせて、拡張 ACL 属性を持つファイルの場所を 示します。これ以上の情報については acl(3) を参照してください。

-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 オプションと同じです。

-depth n
探索の出発点からの深さが n である場合、真となります。

-empty
現在のファイルまたはディレクトリが空の場合、真となります。

-exec utility [
argument ...
] ;
utility
で指定した名前のプログラムを実行し、終了コードが 0 の場 合、真とします。 argument は、utility への引数として渡されます。 この指定は、最後に必ずセミコロン (‘‘;’’) をつけてください。 find をシェルから起動する場合、そのシェルがセミコロンを制御オペレータ と解釈する場合には、セミコロンをクォートする必要があるかもしれま せん。 utility もしくは argument の指定のなかで ‘‘{}’’ が使われて いた場合は、その部分が、現在 find が対象としているファイルのパス 名に置き換えられます。ただし、 utility が実行されるときのカレント ディレクトリは、 find が起動されたディレクトリのままです。 utilityarguments は、シェルのパターンと構造の更なる展開対象と はなりません。

-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 ディレクトリレベ ルまで下ります。 -maxdepth プライマリが指定されている場合、(たと え、通常なら評価されない場合でも) 式全体に適用されます。 -maxdepth 0 は、探索全体をコマンド行引数の範囲に制限します。

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

-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 expression は ( 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 が偽なら、真となり ます。

expression -and expression
expression expression

-and
演算子は論理積 (AND) です。式 2 個を並置することが意 味するところとして、この演算子をわざわざ指定する必要はあ りません。両方の式がともに真のとき、この式の評価が真にな ります。最初の式が偽ならば、2 番目の式は評価されません。

expression -or expression
-or
演算子は論理和 (OR) です。最初の式が真か、2 番目の式 が真であるとき、この式の評価が真になります。最初の式が真 ならば、2 番目の式は評価されません。

演算子とプライマリのすべては find の個別の引数として与える必要がありま す。プライマリ自身が引数を取る場合、その引数も 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
ttt
というファイルより新しいか、所有者が ‘‘wnj’’ である、全ファイ ルを表示します。

find / -newerct ’1 minute ago’ -print
inode 修正時刻が現在から 1 分以内の全ファイルを表示します。

find / -type f -exec echo {} \;
ファイルすべてのリストを出力するために、 echo(1) コマンドを使いま す。

find -L /usr/ports/packages -type l -delete
/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
これは 1 つ前の例と同等ではありません。というのは、 -prune がレベ ル 7 以下では評価されないからです。

互換性

-follow プライマリは廃止されました。かわりに −L オプションを使用して下さ い。詳しくは下記の 規格セクションを参照して下さい。

関連項目

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

規格

find ユーティリティの文法は IEEE Std 1003.1-2001 (‘‘POSIX.1’’) の仕様で決 められた文法のスーパセットです。

-H, -L を除く全 1 文字オプションと -iname, -inum, -print0, -delete, -ls, -regex のプライマリは IEEE Std 1003.1-2001 (‘‘POSIX.1’’) に対する拡張で す。

昔は −d, −L, −x のオプションはそれぞれ -depth, -follow, -xdev のプライマ リを用いて実装されていました。これらのプライマリは常に真に評価されていま した。これらのプライマリは探索が始まる前に効果を与える本当のグローバル変 数であったので、いくつかの合法的な expression が予期しない結果となりまし た。一例として -print -o -depth の expression があります。 -print が常に 真に評価されるため標準の評価の順番では -depth は決して評価されないはずで すが、そうではありませんでした。

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

昔の実装では -exec-ok のプライマリでは、 utility 名やその引数中におい て、空白以外の文字が前後に続く ‘‘{}’’ を置き換えませんでした。このバー ジョンでは utility 名やその引数のどの場所に ‘‘{}’’ が現れても置き換えま す。

−E オプションは、 grep(1) および sed(1) の同等のオプションから着想を得て 実装されました。

歴史

find コマンドは Version 1 AT&T UNIX ではじめて出現しました。

バグ

find によって使われる特殊文字は多くのシェルプログラムにとっても特殊文字で す。特に ‘‘*’’, ‘‘[’’, ‘‘]’’, ‘‘?’’, ‘‘(’’, ‘‘)’’, ‘‘!’’, ‘‘\’’, ‘‘;’’ は、シェルからエスケープされなくてはならないでしょう。

オプションとファイル名との間およびファイル名と expression との間を区切る デリミタが存在しませんので、 -xdev! を指定することは難しいです。この 問題に対処するには、 −f オプションを使うか、 getopt(3) で使われるオプショ ン指定の終了記号 ‘‘−−’’ を使用します。

-delete プライマリは、ファイルシステムツリーの探索オプションを変更する他 のオプションとは十分には連係しません。

(上で記したように) -mindepth-maxdepth プライマリは実際にはグローバル オプションです。これらをオプションらしく見えるオプションと置き換えるべき でしょう。

FreeBSD 10.0 July 29, 2004 FreeBSD 10.0

スポンサーリンク