.\" Copyright (c) 1990, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" the Institute of Electrical and Electronics Engineers, Inc. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)find.1 8.7 (Berkeley) 5/9/95 .\" %FreeBSD: src/usr.bin/find/find.1,v 1.70.2.1 2005/02/26 13:44:04 brueffer Exp % .\" .\" $FreeBSD$ .Dd July 29, 2004 .Dt FIND 1 .Os .Sh 名称 .Nm find .Nd ディレクトリツリーを再帰的に下ってファイルを捜す .Sh 書式 .Nm .Op Fl H | Fl L | Fl P .Op Fl EXdsx .Op Fl f Ar pathname .Op Ar pathname ... .Ar expression .Sh 解説 .Nm ユーティリティは、 .Ar pathname に対してディレクトリツリーを再帰的に下って、 ツリー上の各ファイルについて .Ar expression (後に示す .Dq プライマリ と .Dq 演算子 から構成されます) で指定された処理を実行します。 .Pp オプションとしては以下のものがあります: .Bl -tag -width indent .It Fl E .Ic -regex および .Ic -iregex のオプションの後の正規表現を、 基本正規表現 (BRE) の代りに拡張 (最近の) 正規表現として解釈します。 .Xr re_format 7 マニュアルページは、両方のフォーマットを完全に解説しています。 .It Fl H コマンド行で指定したシンボリックリンクそれぞれに対する ファイル情報とファイルタイプ ( .Xr stat 2 参照) は、シンボリックリンク自体ではなく、 リンク先のファイルのものとなるようにします。 もしリンク先のファイルがなければ、 シンボリックリンク自体のものを使用します。 コマンド行で直接指定されたのではない シンボリックリンクのファイル情報は、 シンボリックリンク自体のものを使用します。 .It Fl L シンボリックリンクそれぞれに対する ファイル情報とファイルタイプ ( .Xr stat 2 参照) は、シンボリックリンク自体ではなく、 リンク先のファイルのものとなるようにします。 もしリンク先のファイルがなければ、 シンボリックリンク自体のものを使用します。 .Pp このオプションは、もはや推奨されない .Ic -follow プライマリと等価です。 .It Fl P シンボリックリンクそれぞれに対する ファイル情報とファイルタイプ ( .Xr stat 2 参照) は、シンボリックリンク自体のものとなるようにします。 これがデフォルトです。 .It Fl X .Xr xargs 1 と組み合わせた際に .Nm を安全に使えるようにします。 .Xr xargs 1 がデリミタ文字として扱う文字がファイル名に含まれる場合、 診断メッセージを標準エラー出力に表示して、 そのファイルをスキップします。 デリミタ文字は、 クォート .Pq Dq Li " ' " 、ダブルクォート .Pq Dq Li " \*q " 、バックスラッシュ .Pq Dq Li \e 、スペース、タブ、改行文字があります。 .Pp 効果的な代案として、 .Fl print0 プライマリを .Dq Nm xargs Fl 0 と共に使用することを検討すると良いかもしれません。 .It Fl d ファイルに対する処理順序を深さ優先の探索方式にします。 すなわち、ディレクトリ自体に 対する処理を行う前に、ディレクトリ内の個々のファイルに対して処理を 実行します。デフォルトでは、ディレクトリは最初に処理されます。 デフォルトの方式は幅優先探索方式では .Em ない ことに注意して下さい。 .Pp このオプションは .St -p1003.1-2001 の .Ic -depth プライマリと等価です。 .Fl d は、 .Nm を .Xr cpio 1 とともに使用する場合、 .Xr cpio 1 が通常でないパーミッションを持つディレクトリに存在する ファイルを処理する際に有益です。 このオプションにより、ファイルをディレクトリに置いている間は 書き込み許可が保持され、その後、最後にディレクトリのパーミッションが 設定されることが保証されます。 .It Fl f .Nm が探索するファイル階層を指定します。 ファイル階層は、本オプションの直後にオペランドとして続けて 指定することもできます。 .It Fl s .Nm がファイル階層を探索する際に、 辞書編集上の順に、すなわち各ディレクトリ内においてアルファベット順に、 辿らせるようにします。 注: .Ql find -s と .Ql "find | sort" とは異なった結果となる場合があります。 .It Fl x ディレクトリツリーを下って行くとき、下り始めのファイルが存在する デバイスのデバイス番号と異なるデバイス番号を持つディレクトリには 下らないようにします。 .Pp このオプションは、廃止された .Ic -xdev プライマリと同等のものです。 .El .Sh プライマリ .Bl -tag -width indent .It Ic -acl 他のオプションと組み合わせて、 拡張 ACL 属性を持つファイルの場所を示します。 これ以上の情報については .Xr acl 3 を参照してください。 .It Ic -amin Ar n 最後にファイルがアクセスされた時刻と、 .Nm を起動した時刻との差 (1 分単位で切り上げます) が .Ar n 分であれば、真とします。 .It Ic -anewer Ar file .Ic -neweram と同じです。 .It Ic -atime Ar n Ns Op Cm smhdw 単位を指定しない場合、 最後にファイルがアクセスされた時刻と、 .Nm を起動した時刻との差 (24 時間単位で切り上げます) が .Ar n 日であれば、真とします。 .Pp 単位を指定する場合、最後にファイルがアクセスされた時刻と、 .Nm を起動した時刻との差が正確に .Ar n 単位であれば、真とします。 可能な時間の単位は次の通りです: .Pp .Bl -tag -width indent -compact .It Cm s 秒 .It Cm m 分 (60 秒) .It Cm h 時間 (60 分) .It Cm d 日 (24 時間) .It Cm w 週 (7 日) .El .Pp いくつもの単位を組み合わせて 1 個の .Ic -atime 引数に使用可能であり、例えば .Dq Li "-atime -1h30m" とできます。 単位指定は、 .Cm + または .Cm - の修正子と組み合わせた場合のみ、おそらく有用でしょう。 .It Ic -cmin Ar n 最後にファイルのステータスが修正された時刻と、 .Nm を起動した時刻との差 (1 分単位で切り上げます) が .Ar n 分であれば、真とします。 .It Ic -cnewer Ar file .Ic -newercm と同じです。 .It Ic -ctime Ar n Ns Op Cm smhdw 単位を指定しない場合、最後にファイルのステータスが変更された時刻と、 .Nm を起動した時刻の差 (24 時間単位で切り上げます) が .Ar n 日であれば、真とします。 .Pp 単位を指定する場合、最後にファイルのステータスが変更された時刻と、 .Nm を起動した時刻との差が正確に .Ar n 単位であれば、真とします。 サポートされている時間の単位については、 .Ic -atime プライマリの記述を参照してください。 .It Ic -delete 見付けたファイルやディレクトリを消去します。常に真を返します。 現在の作業ディレクトリから .Nm は再帰的にディレクトリツリーを下ります。 セキュリティ上の理由から、 .Dq Pa \&. からの相対パス名に .Dq Pa / 文字を含むファイル名のファイルを 消去しようとはしません。 このオプションにより暗黙のうちに深さ優先の処理が指定されます。 .It Ic -depth 常に真です。 .Fl d オプションと同じです。 .It Ic -depth Ar n 探索の出発点からの深さが .Ar n である場合、真となります。 .It Ic -empty 現在のファイルまたはディレクトリが空の場合、真となります。 .It Ic -exec Ar utility Oo Ar argument ... Oc Li \&; .Ar utility で指定した名前のプログラムを実行し、終了コードが 0 の場合、真とします。 .Ar argument は、utility への引数として渡されます。 この指定は、最後に必ずセミコロン .Pq Dq Li \&; をつけてください。 .Nm をシェルから起動する場合、 そのシェルがセミコロンを制御オペレータと解釈する場合には、 セミコロンをクォートする必要があるかもしれません。 utility もしくは argument の指定 のなかで .Dq Li {} が使われていた場合は、その部分が、現在 .Nm が対象としているファイルのパス名に置き換えられます。 ただし、 .Ar utility が実行されるときのカレントディレクトリは、 .Nm が起動されたディレクトリのままです。 .Ar utility と .Ar arguments は、シェルのパターンと構造の更なる展開対象とはなりません。 .It Ic -exec Ar utility Oo Ar argument ... Oc Li {} + .Ic -exec と同じですが、各 .Ar utility の起動において .Dq Li {} はなるべく多くのパス名と置き換えられます。 この動作は .Xr xargs 1 のものに似ています。 .It Ic -execdir Ar utility Oo Ar argument ... Oc Li \&; .Ic -execdir プライマリは .Ic -exec プライマリと同様ですが、 .Ar utility が現在のファイルを持つディレクトリにおいて実行される点が異なります。 文字列 .Dq Li {} に対して置換されるファイル名は適切ではありません。 .It Ic -flags Oo Cm - Ns | Ns Cm + Oc Ns Ar flags , Ns Ar notflags フラグは、シンボル名 .Ns ( Xr chflags 1 参照) で指定します。 フラグの前に .Qq Li no を付けると .Ns ( Qq Li nodump は除きます)、 .Ar notflags と呼ばれます。 .Ar flags にあるフラグは設定されていることが検査され、 .Ar notflags にあるフラグは設定されていないことが検査されます。 これは、設定されているモードビットのみをユーザが指定可能な .Ic -perm とは異なることに注意してください。 .Pp フラグの前にダッシュ .Pq Dq Li - が付く場合、このプライマリは、ファイルのフラグビットのうち少なくとも .Ar flags 中の全ビットが設定されていて、 .Ar notflags 中のどのビットも設定されていない場合に真になります。 フラグの前にプラス .Pq Dq Li + が付く場合、このプライマリは、ファイルのフラグビットのうち .Ar flags のいずれかのビットが設定されているか、 .Ar notflags のいずれかのビットが設定されていない場合に真になります。 どちらでもない場合、このプライマリは、 .Ar flags のビットがファイルのフラグビットに完全に適合し、 .Ar flags のいずれもが .Ar notflags に適合しない場合に真になります。 .It Ic -fstype Ar type 対象ファイルが格納されているファイルシステムのタイプが、 .Ar type で指定されたものである場合に真となります。 .Xr sysctl 8 コマンドを使用して、 システム上で利用可能なファイルシステムタイプを調べることができます: .Pp .Dl "sysctl vfs" .Pp さらに、2 つの 擬似タイプ .Dq Li local と .Dq Li rdonly があります。 前者は、 .Nm を実行しているシステム上に物理的にマウントされているファイルシステムです。 後者は、読み取り専用でマウントされているファイルシステムです。 .It Ic -group Ar gname ファイルが .Ar gname で指定したグループに属している場合、真になります。 .Ar gname が数字で、そのようなグループ名がない場合は、 .Ar gname をグループ ID として扱います。 .It Ic -iname Ar pattern .Ic -name に似ていますが、大文字小文字を区別せずにマッチします。 .It Ic -inum Ar n ファイルの inode 番号が .Ar n なら、真になります。 .It Ic -ipath Ar pattern .Ic -path に似ていますが、大文字小文字を区別せずにマッチします。 .It Ic -iregex Ar pattern .Ic -regex に似ていますが、大文字小文字を区別せずにマッチします。 .It Ic -links Ar n ファイルのリンク数が .Ar n なら、真になります。 .It Ic -ls このプライマリは常に真になります。 対象となっているファイルの情報を標準出力に出力します。 出力する内容は inode 番号、 512 バイトブロックでのファイルの大きさ、 ファイルのパーミッション、ハードリンクの数、所有者、グループ、 バイトで表したファイルの大きさ、最後にファイルが修正された時刻、パス名です。 ファイルがブロック型もしくはキャラクタ型の特殊ファイルならば、 バイトで表したファイルの大きさの代わりにメジャー番号とマイナ番号を 出力します。 ファイルがシンボリックリンクならば、 .Dq Li -> の後にリンク先のファイルのパス名を表示します。 フォーマットは .Bk -words .Nm ls Fl dgils .Ek の出力結果と同じです。 .It Ic -maxdepth Ar n 常に真になります。 コマンド行引数の下、たかだか .Ar n ディレクトリレベルまで下ります。 .Ic -maxdepth プライマリが指定されている場合、(たとえ、通常なら評価されない場合でも) 式全体に適用されます。 .Ic -maxdepth Li 0 は、探索全体をコマンド行引数の範囲に制限します。 .It Ic -mindepth Ar n 常に真になります。 レベルが .Ar n 未満の場合、一切のテストとアクションは適用されません。 .Ic -mindepth プライマリが指定されている場合、(たとえ、通常なら評価されない場合でも) 式全体に適用されます。 .Ic -mindepth Li 1 は、コマンド行引数以外のすべてを処理します。 .It Ic -mmin Ar n 最後にファイルが修正された時刻と、 .Nm を起動した時刻との差 (1 分単位で切り上げます) が .Ar n 分であれば、真とします。 .It Ic -mnewer Ar file .Ic -newer と同じです。 .It Ic -mtime Ar n Ns Op Cm smhdw 単位を指定しない場合、最後にファイルが修正された時刻と、 .Nm を起動した時刻との差(24 時間単位で切り上げます)が .Ar n 日であれば、真とします。 .Pp 単位を指定する場合、最後にファイルが修正された時刻と、 .Nm を起動した時刻との差が正確に .Ar n 単位であれば、真とします。 サポートされている時間の単位については、 .Ic -atime プライマリの記述を参照してください。 .It Ic -name Ar pattern 対象ファイルのパス名の最後のファイル名部分が .Ar pattern で指定したものとマッチするかどうかを調べ、マッチした場合は真になります。 .Ar pattern としては、シェルで使われるパターンマッチ 指定 ( .Dq Li \&[ , .Dq Li \&] , .Dq Li * , .Dq Li \&? ) を使用することができます。 これらの文字は バックスラッシュ .Pq Dq Li \e を前において、パターンマッチ指定ではなく文字として 扱う事を明示することができます。 .It Ic -newer Ar file 対象ファイルの修正日付が、 .Ar file で指定したファイルのものより新しい場合は、真になります。 .It Ic -newer Ns Ar X Ns Ar Y Ar file 現在のファイルの最終アクセス時刻 .Ar ( X Ns = Ns Cm a ) ・ステータス修正時刻 .Ar ( X Ns = Ns Cm c ) ・内容修正時刻 .Ar ( X Ns = Ns Cm m ) が、 .Ar file の最終アクセス時刻 .Ar ( Y Ns = Ns Cm a ) ・ステータス修正時刻 .Ar ( Y Ns = Ns Cm c ) ・内容修正時刻 .Ar ( Y Ns = Ns Cm m ) より新しい場合は、真となります。 さらに .Ar Y Ns = Ns Cm t の場合、 .Ar file は代りに、 .Xr cvs 1 が理解する直接的な時刻指定として解釈されます。 .Ic -newermm は .Ic -newer と同じであることに注意してください。 .It Ic -nogroup 対象ファイルのグループが unknown の場合、真になります。 .It Ic -nouser 対象ファイルの所有者が unknown の場合、真になります。 .It Ic -ok Ar utility Oo Ar argument ... Oc Li \&; .Ic -ok プライマリは .Ic -exec とほぼ同じですが、 .Ar utility を実行するかどうかの確認をユーザに求め、端末にメッセージを出力します。 .Dq Li y 以外の返答をした場合は、 コマンドは実行されず、 .Ic -ok 式の値は偽になります。 .It Ic -okdir Ar utility Oo Ar argument ... Oc Li \&; .Ic -okdir プライマリは、 .Ic -execdir プライマリと同様ですが、 .Ic -ok プライマリのところで説明されたものと同じ例外事項が適用されます。 .It Ic -path Ar pattern 対象ファイルのパス名が、 .Ar pattern で指定したものとマッチするかどうかを調べ、 マッチした場合は真になります。 .Ar pattern としては、シェルで使われるパターンマッチ指定 .Dq ( Li \&[ , .Dq Li \&] , .Dq Li * , .Dq Li \&? ) を使用することができます。 これらの文字は バックスラッシュ .Pq Dq Li \e を前において、パターンマッチ指定ではなく文字として 明示的にマッチさせることができます。 スラッシュ .Pq Dq Li / は、通常文字として扱われますので、 明示的にマッチさせる必要はありません。 .It Ic -perm Oo Cm - Ns | Ns Cm + Oc Ns Ar mode ファイルのモードを、 .Ar mode と比較します。 .Ar mode は、シンボル 形式 ( .Xr chmod 1 参照) もしくは 8 進数形式で指定します。 .Ar mode がシンボル形式の場合は、 .Ar mode は 00000 から開始して、 プロセスのファイル生成マスクとは無関係に、 パーミッションのセットとクリアを行います。 .Ar mode が 8 進数形式の場合は、 ファイルのモードビットのうち、07777 .Pq Dv S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO の部分が比較対象になります。 .Ar mode の最初にダッシュ .Pq Dq Li - を指定した場合は、 .Ar mode でセットされているすべてのビットが ファイルのモードでもセットされていれば、このプライマリは真となります。 .Ar mode の最初にプラス .Pq Dq Li + を指定した場合は、 .Ar mode でセットされているビットのどれかがファイルのモードでもセットされていれば、 このプライマリは真となります。 どちらでもない場合、ファイルのモードと .Ar mode が完全に一致した場合にのみ真となります。 なお、 シンボル形式でモード指定をする場合は、最初の文字をダッシュ .Pq Dq Li - にできません。 .It Ic -print このプライマリは常に真になります。 対象となっているファイルのパス名を標準出力に出力して改行します。 .Ic -exec , -ls , -print0 , .Ic -ok のどのプライマリも指定されなかった場合は、 与えられた式 given expression は .Cm \&( Ar "given expression" Cm \&) Ic -print で置き換えられます。 .It Ic -print0 .Ic -print とほぼ同じですが、標準出力に対象となっているファイルのパス名を出力 したあと、改行ではなく、 .Tn ASCII NUL 文字 (文字コード 0) を出力します。 .It Ic -prune このプライマリは常に真になります。 対象となっているファイル配下のディレクトリに下りないようにします。 .Fl d オプションが指定されている場合は、 .Ic -prune プライマリの指定は無効になります。 .It Ic -regex Ar pattern ファイルのパス全体が、正規表現 .Ar pattern にマッチする場合、真になります。 ファイル名 .Dq Pa ./foo/xyzzy にマッチさせるには、 正規表現 .Dq Li ".*/[xyz]*" や .Dq Li ".*/foo/.*" が使えますが、 .Dq Li xyzzy や .Dq Li /foo/ は使えません。 .It Ic -size Ar n Ns Op Cm c ファイルサイズを 512 バイトのブロック単位で数えたとき (端数は切り上げ)、 .Ar n ブロックであれば真になります。 .Ar n のあとに .Cm c が指定されていた場合は、ファイルサイズが .Ar n バイト (文字) であれば真になります。 .It Ic -type Ar t ファイルタイプが .Ar t で指定されたタイプに一致すれば真になります。 タイプとして、次のような指定が可能です: .Pp .Bl -tag -width indent -compact .\" jpman project では special file を「特殊ファイル」と訳している。 .\" これにあわせて block special を「ブロックスペシャル」ではなく .\" 「ブロック特殊」とするのは違和感があるので、「ファイル」を補った。 .\" Kazuo Horikawa 1999/03/10 .It Cm b ブロック型特殊ファイル .It Cm c キャラクタ型特殊ファイル .It Cm d ディレクトリ .It Cm f 普通のファイル .It Cm l シンボリックリンク .It Cm p FIFO .It Cm s ソケット .El .It Ic -user Ar uname ファイルの所有者が、 .Ar uname で指定されたユーザと一致すれば真になります。 もし .Ar uname が数字で、そのようなユーザ名がなければ、 ユーザ ID が指定されたものとして扱います。 .El .Pp なお、数字を引数にとるプライマリは、 数字の前にプラス .Pq Dq Li + およびマイナス .Pq Dq Li - をつけることができます。 それぞれ .Dq n より大 および .Dq n より小 の意味になり、 .Dq 正確に n という意味ではなくなります。 .Sh 演算子 以下の演算子を使って、プライマリを組み合わせることができます。 演算子は優先度が下がる順番で示されています。 .Pp .Bl -tag -width "( expression )" -compact .It Cm \&( Ar expression Cm \&) もし、括弧内の .Ar expression が真なら、真になります。 .Pp .It Cm \&! Ar expression .It Cm -false Ar expression .It Cm -not Ar expression 単項否定演算子 .Pq Tn NOT です。 .Ar expression が偽なら、真となります。 .Pp .It Ar expression Cm -and Ar expression .It Ar expression expression .Cm -and 演算子は論理積 .Pq Tn AND です。 式 2 個を並置することが意味するところとして、 この演算子をわざわざ指定する必要はありません。 両方の式がともに真のとき、この式の評価が真になります。 最初の式が偽ならば、2 番目の式は評価されません。 .Pp .It Ar expression Cm -or Ar expression .Cm -or 演算子は論理和 .Pq Tn OR です。 最初の式が真か、2 番目の式が真であるとき、この式の評価が真になります。 最初の式が真ならば、2 番目の式は評価されません。 .El .Pp 演算子とプライマリのすべては .Nm の個別の引数として与える必要があります。 プライマリ自身が引数を取る場合、その引数も .Nm の個別の引数として与える必要があります。 .Sh 使用例 コマンドラインからのタイプ例です。 .Bl -tag -width indent .It Li "find / \e! -name \*q*.c\*q -print" ファイル名の終わりが .Pa .c でない全ファイルを表示します。 .It Li "find / -newer ttt -user wnj -print" .Pa ttt というファイルより新しく 所有者が .Dq wnj である全ファイルを表示します。 .It Li "find / \e! \e( -newer ttt -user wnj \e) -print" .Pa ttt というファイルより古く所有者が .Dq wnj であるという条件が成立しない、全ファイルを表示します。 .It Li "find / \e( -newer ttt -or -user wnj \e) -print" .Pa ttt というファイルより新しいか、 所有者が .Dq wnj である、全ファイルを表示します。 .It Li "find / -newerct '1 minute ago' -print" inode 修正時刻が現在から 1 分以内の全ファイルを表示します。 .It Li "find / -type f -exec echo {} \e;" ファイルすべてのリストを出力するために、 .Xr echo 1 コマンドを使います。 .It Li "find -L /usr/ports/packages -type l -delete" .Pa /usr/ports/packages にある壊れたシンボリックリンクのすべてを削除します。 .It Li "find /usr/src -name CVS -prune -o -depth +6 -print" 作業ディレクトリ .Pa /usr/src の中で、少なくとも 7 レベル以上の深さのファイルとディレクトリを 探索します。 .It Li "find /usr/src -name CVS -prune -o -mindepth 7 -print" これは 1 つ前の例と同等ではありません。 というのは、 .Ic -prune がレベル 7 以下では評価されないからです。 .El .Sh 互換性 .Ic -follow プライマリは廃止されました。 かわりに .Fl L オプションを使用して下さい。 詳しくは下記の .Sx 規格 セクションを参照して下さい。 .Sh 関連項目 .Xr chflags 1 , .Xr chmod 1 , .Xr cvs 1 , .Xr locate 1 , .Xr whereis 1 , .Xr which 1 , .Xr xargs 1 , .Xr stat 2 , .Xr acl 3 , .Xr fts 3 , .Xr getgrent 3 , .Xr getpwent 3 , .Xr strmode 3 , .Xr re_format 7 , .Xr symlink 7 .Sh 規格 .Nm ユーティリティの文法は .St -p1003.1-2001 の仕様で決められた文法のスーパセットです。 .Pp .Ic -H , .Ic -L を除く全 1 文字オプションと .\" .Ic -iname , -inum , -iregex , -print0 , -delete , -ls , .\" ja-groff-0.100_3 で整形できないためマクロ使用方法を変えています .Ic -iname , .Ic -inum , .Ic -print0 , .Ic -delete , .Ic -ls , .Ic -regex のプライマリは .St -p1003.1-2001 に対する拡張です。 .Pp 昔は .Fl d , L , x のオプションは それぞれ .Ic -depth , -follow , -xdev のプライマリを 用いて実装されていました。 これらのプライマリは常に真に評価されていました。 これらのプライマリは 探索が始まる前に効果を与える本当のグローバル変数であったので、 いくつかの合法的な expression が予期しない結果となりました。 一例として .Ic -print Cm -o Ic -depth の expression があります。 .Ic -print が常に真に評価されるため 標準の評価の順番では .Ic -depth は決して評価されないはずですが、 そうではありませんでした。 .Pp 演算子の .Cm -or は .Cm -o として実装されていました。 演算子の .Cm -and は .Cm -a として実装されていました。 .Pp 昔の実装では .Ic -exec と .Ic -ok のプライマリでは、 utility 名やその引数中において、 空白以外の文字が前後に続く .Dq Li {} を置き換えませんでした。 このバージョンでは utility 名やその引数のどの場所に .Dq Li {} が現れても 置き換えます。 .Pp .Fl E オプションは、 .Xr grep 1 および .Xr sed 1 の同等のオプションから着想を得て実装されました。 .Sh 歴史 .Nm コマンドは .At v1 ではじめて出現しました。 .Sh バグ .Nm によって使われる特殊文字は多くのシェルプログラムにとっても 特殊文字です。 特に .Dq Li * , .Dq Li \&[ , .Dq Li \&] , .Dq Li \&? , .Dq Li \&( , .Dq Li \&) , .Dq Li \&! , .Dq Li \e , .Dq Li \&; は、 シェルからエスケープされなくてはならないでしょう。 .Pp オプションとファイル名との間および ファイル名と .Ar expression との間を区切るデリミタが存在しませんので、 .Pa -xdev や .Pa \&! を指定することは難しいです。 この問題に対処するには、 .Fl f オプションを使うか、 .Xr getopt 3 で使われるオプション指定の終了記号 .Dq Fl Fl を使用します。 .Pp .Ic -delete プライマリは、ファイルシステムツリーの探索オプションを変更する 他のオプションとは十分には連係しません。 .Pp (上で記したように) .Ic -mindepth と .Ic -maxdepth プライマリは実際にはグローバルオプションです。 これらをオプションらしく見えるオプションと置き換えるべきでしょう。