FIND
Section: User Commands (1)
索引
jman
BSD mandoc
索引
名称
find
- ディレクトリツリーを再帰的に下ってファイルを捜す
索引
書式
[-H | -L | -P
]
[-EXdsx
]
[-f pathname
]
[pathname ...
]
expression
索引
解説
ユーティリティは、
pathname
に対してディレクトリツリーを再帰的に下って、
ツリー上の各ファイルについて
expression
(後に示す
``プライマリ''
と
``演算子''
から構成されます)
で指定された処理を実行します。
オプションとしては以下のものがあります:
- -E
-
-regex
および
-iregex
のオプションの後の正規表現を、
基本正規表現 (BRE) の代りに拡張 (最近の) 正規表現として解釈します。
re_format7
マニュアルページは、両方のフォーマットを完全に解説しています。
- -H
-
コマンド行で指定したシンボリックリンクそれぞれに対する
ファイル情報とファイルタイプ (
stat(2)
参照) は、シンボリックリンク自体ではなく、
リンク先のファイルのものとなるようにします。
もしリンク先のファイルがなければ、
シンボリックリンク自体のものを使用します。
コマンド行で直接指定されたのではない
シンボリックリンクのファイル情報は、
シンボリックリンク自体のものを使用します。
- -L
-
シンボリックリンクそれぞれに対する
ファイル情報とファイルタイプ (
stat(2)
参照) は、シンボリックリンク自体ではなく、
リンク先のファイルのものとなるようにします。
もしリンク先のファイルがなければ、
シンボリックリンク自体のものを使用します。
このオプションは、もはや推奨されない
-follow
プライマリと等価です。
- -P
-
シンボリックリンクそれぞれに対する
ファイル情報とファイルタイプ (
stat(2)
参照) は、シンボリックリンク自体のものとなるようにします。
これがデフォルトです。
- -X
-
xargs(1)
と組み合わせた際に
を安全に使えるようにします。
xargs(1)
がデリミタ文字として扱う文字がファイル名に含まれる場合、
診断メッセージを標準エラー出力に表示して、
そのファイルをスキップします。
デリミタ文字は、
クォート
(`` '
''
)
、ダブルクォート
(``
''
)
、バックスラッシュ
(``\
''
)
、スペース、タブ、改行文字があります。
効果的な代案として、
-print0
プライマリを
``xargs -0
''
と共に使用することを検討すると良いかもしれません。
- -d
-
ファイルに対する処理順序を深さ優先の探索方式にします。
すなわち、ディレクトリ自体に
対する処理を行う前に、ディレクトリ内の個々のファイルに対して処理を
実行します。デフォルトでは、ディレクトリは最初に処理されます。
デフォルトの方式は幅優先探索方式では
ない
ことに注意して下さい。
このオプションは
St -p1003.1-2001
の
-depth
プライマリと等価です。
-d
は、
を
cpio(1)
とともに使用する場合、
cpio(1)
が通常でないパーミッションを持つディレクトリに存在する
ファイルを処理する際に有益です。
このオプションにより、ファイルをディレクトリに置いている間は
書き込み許可が保持され、その後、最後にディレクトリのパーミッションが
設定されることが保証されます。
- -f
-
が探索するファイル階層を指定します。
ファイル階層は、本オプションの直後にオペランドとして続けて
指定することもできます。
- -s
-
がファイル階層を探索する際に、
辞書編集上の順に、すなわち各ディレクトリ内においてアルファベット順に、
辿らせるようにします。
注:
`find'
-s
と
`find'
| sort
とは異なった結果となる場合があります。
- -x
-
ディレクトリツリーを下って行くとき、下り始めのファイルが存在する
デバイスのデバイス番号と異なるデバイス番号を持つディレクトリには
下らないようにします。
このオプションは、廃止された
-xdev
プライマリと同等のものです。
索引
プライマリ
- -acl
-
他のオプションと組み合わせて、
拡張 ACL 属性を持つファイルの場所を示します。
これ以上の情報については
acl(3)
を参照してください。
- -amin n
-
最後にファイルがアクセスされた時刻と、
を起動した時刻との差 (1 分単位で切り上げます) が
n
分であれば、真とします。
- -anewer file
-
-neweram
と同じです。
- -atime n [smhdw
]
-
単位を指定しない場合、
最後にファイルがアクセスされた時刻と、
を起動した時刻との差 (24 時間単位で切り上げます) が
n
日であれば、真とします。
単位を指定する場合、最後にファイルがアクセスされた時刻と、
を起動した時刻との差が正確に
n
単位であれば、真とします。
可能な時間の単位は次の通りです:
- s
-
秒
- m
-
分 (60 秒)
- h
-
時間 (60 分)
- d
-
日 (24 時間)
- w
-
週 (7 日)
いくつもの単位を組み合わせて 1 個の
-atime
引数に使用可能であり、例えば
``-atime -1h30m
''
とできます。
単位指定は、
+
または
-
の修正子と組み合わせた場合のみ、おそらく有用でしょう。
- -cmin n
-
最後にファイルのステータスが修正された時刻と、
を起動した時刻との差 (1 分単位で切り上げます) が
n
分であれば、真とします。
- -cnewer file
-
-newercm
と同じです。
- -ctime n [smhdw
]
-
単位を指定しない場合、最後にファイルのステータスが変更された時刻と、
を起動した時刻の差 (24 時間単位で切り上げます) が
n
日であれば、真とします。
単位を指定する場合、最後にファイルのステータスが変更された時刻と、
を起動した時刻との差が正確に
n
単位であれば、真とします。
サポートされている時間の単位については、
-atime
プライマリの記述を参照してください。
- -delete
-
見付けたファイルやディレクトリを消去します。常に真を返します。
現在の作業ディレクトリから
は再帰的にディレクトリツリーを下ります。
セキュリティ上の理由から、
``.
''
からの相対パス名に
``/
''
文字を含むファイル名のファイルを
消去しようとはしません。
このオプションにより暗黙のうちに深さ優先の処理が指定されます。
- -depth
-
常に真です。
-d
オプションと同じです。
- -depth n
-
探索の出発点からの深さが
n
である場合、真となります。
- -empty
-
現在のファイルまたはディレクトリが空の場合、真となります。
- -exec utility [argument ... ;
]
-
utility
で指定した名前のプログラムを実行し、終了コードが 0
の場合、真とします。
argument
は、utility への引数として渡されます。
この指定は、最後に必ずセミコロン
(``;
''
)
をつけてください。
をシェルから起動する場合、
そのシェルがセミコロンを制御オペレータと解釈する場合には、
セミコロンをクォートする必要があるかもしれません。
utility もしくは argument の指定
のなかで
``{}
''
が使われていた場合は、その部分が、現在
が対象としているファイルのパス名に置き換えられます。
ただし、
utility
が実行されるときのカレントディレクトリは、
が起動されたディレクトリのままです。
utility
と
arguments
は、シェルのパターンと構造の更なる展開対象とはなりません。
- -exec utility [argument ... {}
]
-
-exec
と同じですが、各
utility
の起動において
``{}
''
はなるべく多くのパス名と置き換えられます。
この動作は
xargs(1)
のものに似ています。
- -execdir utility [argument ... ;
]
-
-execdir
プライマリは
-exec
プライマリと同様ですが、
utility
が現在のファイルを持つディレクトリにおいて実行される点が異なります。
文字列
``{}
''
に対して置換されるファイル名は適切ではありません。
- -flags [- | + flags , notflags
]
-
フラグは、シンボル名
( chflags(1)
参照) で指定します。
フラグの前に
Qq Li no
を付けると
( Qq nodump
は除きます)、
notflags
と呼ばれます。
flags
にあるフラグは設定されていることが検査され、
notflags
にあるフラグは設定されていないことが検査されます。
これは、設定されているモードビットのみをユーザが指定可能な
-perm
とは異なることに注意してください。
フラグの前にダッシュ
(``-
''
)
が付く場合、このプライマリは、ファイルのフラグビットのうち少なくとも
flags
中の全ビットが設定されていて、
notflags
中のどのビットも設定されていない場合に真になります。
フラグの前にプラス
(``+
''
)
が付く場合、このプライマリは、ファイルのフラグビットのうち
flags
のいずれかのビットが設定されているか、
notflags
のいずれかのビットが設定されていない場合に真になります。
どちらでもない場合、このプライマリは、
flags
のビットがファイルのフラグビットに完全に適合し、
flags
のいずれもが
notflags
に適合しない場合に真になります。
- -fstype type
-
対象ファイルが格納されているファイルシステムのタイプが、
type
で指定されたものである場合に真となります。
sysctl(8)
コマンドを使用して、
システム上で利用可能なファイルシステムタイプを調べることができます:
"sysctl vfs"
さらに、2 つの 擬似タイプ
``local
''
と
``rdonly
''
があります。
前者は、
を実行しているシステム上に物理的にマウントされているファイルシステムです。
後者は、読み取り専用でマウントされているファイルシステムです。
- -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 バイトブロックでのファイルの大きさ、
ファイルのパーミッション、ハードリンクの数、所有者、グループ、
バイトで表したファイルの大きさ、最後にファイルが修正された時刻、パス名です。
ファイルがブロック型もしくはキャラクタ型の特殊ファイルならば、
バイトで表したファイルの大きさの代わりにメジャー番号とマイナー番号を
出力します。
ファイルがシンボリックリンクならば、
``->
''
の後にリンク先のファイルのパス名を表示します。
フォーマットは
-words
ls -dgils
の出力結果と同じです。
- -maxdepth n
-
常に真になります。
コマンド行引数の下、たかだか
n
ディレクトリレベルまで下ります。
-maxdepth
プライマリが指定されている場合、(たとえ、通常なら評価されない場合でも)
式全体に適用されます。
-maxdepth 0
は、探索全体をコマンド行引数の範囲に制限します。
- -mindepth n
-
常に真になります。
レベルが
n
未満の場合、一切のテストとアクションは適用されません。
-mindepth
プライマリが指定されている場合、(たとえ、通常なら評価されない場合でも)
式全体に適用されます。
-mindepth 1
は、コマンド行引数以外のすべてを処理します。
- -mmin n
-
最後にファイルが修正された時刻と、
を起動した時刻との差 (1 分単位で切り上げます) が
n
分であれば、真とします。
- -mnewer file
-
-newer
と同じです。
- -mtime n [smhdw
]
-
単位を指定しない場合、最後にファイルが修正された時刻と、
を起動した時刻との差(24 時間単位で切り上げます)が
n
日であれば、真とします。
単位を指定する場合、最後にファイルが修正された時刻と、
を起動した時刻との差が正確に
n
単位であれば、真とします。
サポートされている時間の単位については、
-atime
プライマリの記述を参照してください。
- -name pattern
-
対象ファイルのパス名の最後のファイル名部分が
pattern
で指定したものとマッチするかどうかを調べ、マッチした場合は真になります。
pattern
としては、シェルで使われるパターンマッチ
指定 (
``[
''
``]
''
``*
''
``?
''
を使用することができます。
これらの文字は
バックスラッシュ
(``\
''
)
を前において、パターンマッチ指定ではなく文字として
扱う事を明示することができます。
- -newer file
-
対象ファイルの修正日付が、
file
で指定したファイルのものより新しい場合は、真になります。
- -newer X Y 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 / \! -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
オプションを使用して下さい。
詳しくは下記の
Sx 規格
セクションを参照して下さい。
索引
関連項目
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_format7,
symlink(7)
索引
規格
ユーティリティの文法は
St -p1003.1-2001
の仕様で決められた文法のスーパセットです。
-H
-L
を除く全 1 文字オプションと
-iname
-inum
-print0
-delete
-ls
-regex
のプライマリは
St -p1003.1-2001
に対する拡張です。
昔は
-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)
の同等のオプションから着想を得て実装されました。
索引
歴史
コマンドは
AT&T System
v1
ではじめて出現しました。
索引
バグ
によって使われる特殊文字は多くのシェルプログラムにとっても
特殊文字です。
特に
``*
''
``[
''
``]
''
``?
''
``(
''
``)
''
``!
''
``\
''
``;
''
は、
シェルからエスケープされなくてはならないでしょう。
オプションとファイル名との間および
ファイル名と
expression
との間を区切るデリミタが存在しませんので、
-xdev
や
!
を指定することは難しいです。
この問題に対処するには、
-f
オプションを使うか、
getopt(3)
で使われるオプション指定の終了記号
``--
''
を使用します。
-delete
プライマリは、ファイルシステムツリーの探索オプションを変更する
他のオプションとは十分には連係しません。
(上で記したように)
-mindepth
と
-maxdepth
プライマリは実際にはグローバルオプションです。
これらをオプションらしく見えるオプションと置き換えるべきでしょう。
索引
Index
- 名称
-
- 書式
-
- 解説
-
- プライマリ
-
- 演算子
-
- 使用例
-
- 互換性
-
- 関連項目
-
- 規格
-
- 歴史
-
- バグ
-
Time: 07:06:06 GMT, January 12, 2009