findコマンド(ディレクトリ内のファイルを検索する)
形式
find[-d][-H][-h][-L] パス名[...][検索式]
機能
検索を開始するパスをパス名に指定し,ディレクトリ階層をたどって,ファイルを検索します。検索の条件および検索したファイルの扱いを,検索式に指定できます。
引数
オプション,検索を開始するパス名および検索式を指定します。検索を開始するパス名は,findコマンドの引数のパス名で指定します。
オプションはハイフン(-)と共に1文字のオプション名を指定します。
- -d
-
ディレクトリ内のファイルを階層の深いディレクトリから先に検索します。
- -H
-
UNIXの場合,引数として指定したパス名がシンボリックリンクだった場合,リンク先が指定されたものとして処理します。リンク先が存在しない場合は,シンボリックリンクが指定されたとして処理します。検索中に遭遇したシンボリックリンクはリンク先を参照しません。-Hオプション,-hオプションおよび-Lオプションは,最後に指定したオプションが有効となります。
Windowsの場合,-Hオプションを指定しても無視されます。
- -h
-
UNIXの場合,シンボリックリンクは,すべてリンク先を参照して処理を継続します。リンク先が存在しない場合は,シンボリックリンクが指定されたとして処理します。-Hオプション,-hオプションおよび-Lオプションは,最後に指定したオプションが有効となります。
Windowsの場合,-hオプションを指定しても無視されます。
- -L
-
UNIXの場合,シンボリックリンクは,すべてリンク先を参照して処理を継続します。リンク先が存在しない場合は,シンボリックリンクが指定されたとして処理します。-Hオプション,-hオプションおよび-Lオプションは,最後に指定したオプションが有効となります。
Windowsの場合,-Lオプションを指定しても無視されます。
- パス名
-
パス名を指定します。
- 検索式
-
検索式(expression)は,プライマリおよび演算子を指定します。
-
プライマリ
- -amin 時間差
-
UNIXの場合,ファイルおよびディレクトリの最終アクセス日時と,findが実行を開始した日時の差が,ここで指定された時間差(単位:分)のときは真です。日時の差は,1分未満は切り上げます。
時間差は,符号を指定しないか,+または-の符号を付けた数値を指定することで,次のように扱われます。
-
符号を指定しない場合:指定した時間差
-
+を前置した場合:指定値より大きい
-
-を前置した場合:指定値より小さい
時間差の範囲は2147483647(0x7fffffff)までで,それ以上を指定しても2147483647となります。
時間差に数値以外を指定した場合,エラーメッセージ(find: プライマリ: 指定した文字列: illegal numeric value)を出力します。
時間差を指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
Windowsの場合,指定するとエラーとなります。
-
- -anewer パス名
-
UNIXの場合,ファイルおよびディレクトリの最終アクセス日時がパス名より新しい場合は真です。
Windowsの場合,指定するとエラーとなります。
- -atime 時間差
-
UNIXの場合,ファイルおよびディレクトリの最終アクセス日時と,findが実行を開始した日時の差がここで指定された時間差(単位:日)のときは真です。日時の差は,1日未満は切り上げます。
時間差は符号を指定しないか,+または-の符号を付けた数値を指定することで,次のように扱われます。
-
符号を指定しない場合:指定した時間差
-
+を前置した場合:指定値より大きい
-
-を前置した場合:指定値より小さい
時間差の範囲は2147483647(0x7fffffff)までで,それ以上を指定しても2147483647となります。
時間差に数値以外を指定した場合,エラーメッセージ(find: プライマリ: 指定した文字列: illegal numeric value)を出力します。
時間差を指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
Windowsの場合,指定するとエラーとなります。
-
- -cmin 時間差
-
UNIXの場合,ファイル情報の最終変更日時(書き込みが発生した,所有者,グループ,リンク数やモードなどが変更された日時)と,findが実行を開始した日時の差が,ここで指定された時間差(単位:分)のときは真です。日時の差は,1分未満は切り上げます。
時間差は符号を指定しないか,+または-の符号を付けた数値を指定することで,次のように扱われます。
-
符号を指定しない場合:指定した時間差
-
+を前置した場合:指定値より大きい
-
-を前置した場合:指定値より小さい
nの範囲は2147483647(0x7fffffff)までで,それ以上を指定しても2147483647となります。
時間差に数値以外を指定した場合,エラーメッセージ(find: プライマリ: 指定した文字列: illegal numeric value)を出力します。
時間差を指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
Windowsの場合,指定するとエラーとなります。
-
- -cnewer パス名
-
UNIXの場合,ファイル情報の最終変更日時(書き込みが発生した,所有者,グループ,リンク数およびモードなどが最後に変更された日時)が,パス名で指定されたファイルより新しい場合は真です。
Windowsの場合,指定するとエラーとなります。
- -ctime 時間差
-
UNIXの場合,ファイル情報の最終変更日時(書き込みが発生した,所有者,グループ,リンク数およびモードなどが最後に変更された日時)と,findが実行を開始した日時の差がここで指定された時間差(単位:日)のときは真です。日時の差は,1日未満は切り上げます。
時間差は符号を指定しないか,+または-の符号を付けた数値を指定することで,次のように扱われます。
-
符号を指定しない場合:指定した時間差
-
+を前置した場合:指定値より大きい
-
-を前置した場合:指定値より小さい
時間差の範囲は2147483647(0x7fffffff)までで,それ以上を指定しても2147483647となります。
時間差に数値以外を指定した場合,エラーメッセージ(find: プライマリ: 指定した文字列: illegal numeric value)を出力します。
時間差を指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
Windowsの場合,指定するとエラーとなります。
-
- -depth
-
階層の深いディレクトリから検索します。ディレクトリ内のファイルを先に処理します。常に真です。
- -empty
-
ファイルやディレクトリが空の場合は真です。
- -exec コマンドライン ;
-
検索したファイルおよびディレクトリに対して処理をするコマンドラインを指定します。
-
findコマンドを実行するシェルによっては,*,;(セミコロン)などの文字が展開されるため,"(ダブルクォーテーション)または'(シングルクォーテーション)で囲むか,エスケープ文字(\)を使用する必要があります。
-
コマンドラインは;(セミコロン)で区切ります。
-
コマンドラインで指定したプログラムは,findが起動されたディレクトリをカレントディレクトリとして起動します。
-
コマンドラインに{ }を指定すると,検索したファイルまたはディレクトリのパス名に置き換わります。パス名は,検索を開始するパスを絶対パスで指定した場合は絶対パスに,検索を開始するパスを相対パスで指定した場合は相対パスになります。
-
コマンドラインで指定したプログラムが終了コード0で終了した場合,真です。
-
- -follow
-
常に真です。
UNIXの場合,シンボリックリンクは,すべてリンク先を参照して処理を継続します。リンク先が存在しない場合は,シンボリックリンクが指定されたとして処理します。
- -group グループ名
-
Windowsの場合,常に偽となります。
UNIXの場合,ファイルの属するグループがグループ名の場合は真です。グループ名が数字で,そのグループ名が存在しないときは,グループIDと解釈します。
- -iname パターン
-
-nameオプションの説明を参照してください。ただし,英大文字と英小文字を区別しません。
- -inum 番号
-
Windowsの場合,常に偽となります。
UNIXの場合,ファイルのinode番号が指定した番号のときは真です。
-
番号は符号を指定しないか,+または-の符号を付けた数値を指定します。符号を指定しない場合は指定値を,+を前置した場合は指定値より大きい,-を前置した場合は指定値より小さいとして扱います。番号の範囲は2147483647(0x7fffffff)までで,それ以上を指定しても2147483647となります。
-
番号に数値以外を指定した場合,エラーメッセージ(find: プライマリ: 指定した文字列: illegal numeric value)を出力します。
-
番号を指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
-
- -links リンク数
-
Windowsの場合,常に偽となります。
UNIXの場合,ファイルのリンク数が指定したリンク数のときは真です。
-
リンク数は符号を指定しないか,+または-の符号を付けた数値を指定します。符号を指定しない場合は指定値を,+を前置した場合は指定値より大きい,-を前置した場合は指定値より小さいとして扱います。リンク数の範囲は2147483647(0x7fffffff)までで,それ以上を指定しても2147483647となります。
-
リンク数に数値以外を指定した場合,エラーメッセージ(find: プライマリ: 指定した文字列: illegal numeric value)を出力します。
-
リンク数を指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
-
- -ls
-
Windowsの場合は,ファイルパーミッション,所有者名,サイズ(バイト単位),最終修正日時およびパス名を標準出力に出力します。常に真です。
UNIXの場合,inode番号,サイズ(512バイト単位),ファイルパーミッション,ハードリンク数,所有者名,グループ,サイズ(バイト単位),最終修正日時およびパス名を標準出力に出力します。常に真です。ファイルがスペシャルファイルの場合は,サイズ(バイト単位)の代わりにメジャー番号およびマイナー番号を表示します。ファイルがシンボリックリンクの場合は,リンク先のパス名が「->」のあとに表示されます。
- -maxdepth 深さ
-
現在検索しているディレクトリの深さが,指定した深さより小さいまたは同じ場合には真です。最初に指定したディレクトリの深さは1です。
-
深さの指定範囲は,0から32767までです。0を指定すると,検索対象ディレクトリだけ(ディレクトリに格納されているファイルは対象外)となります。
-
指定できる値より大きい値を指定するとエラーとなります(find: 指定値: maxdepth value too large)。
-
深さに数値以外を指定した場合,エラーメッセージ(find: 指定した文字列: プライマリ: value invalid)を出力します。
-
深さを指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
-
- -mindepth 深さ
-
現在検索しているディレクトリの深さが指定した深さ以上の場合には真です。
-
深さの指定範囲は,0から32767までです。
-
指定できる値より大きい値を指定してもエラーになりません。
-
深さに数値以外を指定した場合,0が指定されたことになります。
-
深さを指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
-
- -mmin 時間差
-
ファイルおよびディレクトリの最終修正日時と,findが実行を開始した日時の差が時間差で指定された分のときは真です。日時の差は,1分未満は切り上げます。
-
時間差は符号を指定しないか,+または-の符号を付けた数値を指定します。符号を指定しない場合は指定値を,+を前置した場合は指定値より大きい,-を前置した場合は指定値より小さいとして扱います。時間差の範囲は2147483647(0x7fffffff)までで,それ以上を指定しても2147483647となります。
-
時間差に数値以外を指定した場合,エラーメッセージ(find: プライマリ: 指定した文字列: illegal numeric value)を出力します。
-
時間差を指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
-
- -mtime 時間差
-
ファイルおよびディレクトリの最終修正日時と,findが実行を開始した日時の差が時間差で指定された日のときは真です。日時の差は,1日未満は切り上げます。
-
時間差は符号を指定しないか,+または-の符号を付けた数値を指定します。符号を指定しない場合は指定値を,+を前置した場合は指定値より大きい,-を前置した場合は指定値より小さいとして扱います。時間差の範囲は2147483647(0x7fffffff)までで,それ以上を指定しても2147483647となります。
-
時間差に数値以外を指定した場合,エラーメッセージ(find: プライマリ: 指定した文字列: illegal numeric value)を出力します。
-
時間差を指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
-
- -mount
-
常に真です。UNIXの場合,検索を開始したディレクトリのデバイス番号と異なるディレクトリは,検索しないようにします。
- -name パターン
-
検索するファイル名またはディレクトリ名をパターンで指定します。検索したファイル名またはディレクトリ名がパターンに一致する場合は真です。
パターンは,文字とワイルドカードの組み合わせで指定します。ワイルドカードで使用する文字を指定するために,エスケープ文字(\)を使用できます。また,ワイルドカードで使用する文字以外もエスケープ文字(\)を使用できます。この場合,そのまま\が無視されたように見えます。
ワイルドカードとして使用できる文字を次の表に示します。
ワイルドカード
意味
?
任意の1文字に合致します。
*
0文字以上の文字列に合致します。
[…]
[ ]に囲まれた文字列のどれか1文字に合致します。[ ]に囲まれた文字列の先頭に!または^を付けた場合,[ ]に囲まれていない文字に合致します。-(ハイフン)で区切るとハイフンで区切られた,間にある任意の文字(その2文字も含む)に合致します。
ワイルドカード[ ]の記述例を次の表に示します。
記述例
意味
[!abc]
a,b,cの3つを除く文字と合致します。
[0-9]
0から9までのどれかに合致します。
[a-z]
英小文字に合致します。
[A-Z]
英大文字に合致します。
[0-9a-zA-Z]
英数字に合致します。
- -newer パス名
-
現在のファイルおよびディレクトリが,パス名の最終修正日時より新しい場合は真です。
- -nogroup
-
Windowsの場合,常に偽となります。
UNIXの場合,現在のファイルが,存在しないグループに属している場合に真です。
- -nouser
-
Windowsの場合,常に偽となります。
UNIXの場合,現在のファイルの所有者が存在していないユーザーの場合に真です。
- -ok コマンドライン ;
-
検索したファイルおよびディレクトリに対して処理をするコマンドラインを指定します。
-
findコマンドを実行するシェルによっては,*,;(セミコロン)などの文字が展開されるため,"(ダブルクォーテーション)または'(シングルクォーテーション)で囲むか,エスケープ文字(\)を使用する必要があります。
-
コマンドラインは;(セミコロン)で区切ります。
-
コマンドラインで指定したプログラムは,findが起動されたディレクトリをカレントディレクトリとして起動します。起動する前に,ユーザーに応答を求めます。標準入力からyが入力されない場合,コマンドラインを実行しないで,偽を返します。
-
コマンドラインに{ }を指定すると,検索したファイルまたはディレクトリのパス名に置き換わります。パス名は,検索を開始するパス名を絶対パスで指定した場合は絶対パスに,検索を開始するパスを相対パスで指定した場合は相対パスになります。
-
コマンドラインで指定したプログラムが終了コード0で終了した場合,真です。
-
- -path パターン
-
検索するファイル名またはディレクトリ名のパス名をパターンで指定します。検索したファイルまたはディレクトリのパス名がパターンに一致する場合は真です。
-
パターンには,指定した文字とワイルドカードの組み合わせで指定します。ワイルドカードで使用する文字そのものを指定するために,エスケープ文字(\)を使用できます。ワイルドカードで使用する文字以外に使用した場合,\が無視されたように見えます。
-
パターンの指定の詳細は,-name パターンの説明を参照してください。
-
- -perm [-]パーミッション
-
UNIXの場合,パーミッションを8進数の数値またはシンボルで指定します。Windowsでこの引数を指定するとエラー(find: -perm: unknown option)になります。
パーミッションをハイフン(-)に続いて指定した場合,ファイルまたはディレクトリのモードのうちパーミッションで指定された値が設定されていると真になります。ハイフンが指定されない場合は,パーミッションとファイルのモードが完全に一致したときに真になります。
パーミッションを数値で指定した場合,8進数以外または8進数の07777(10進数の4095)より大きな値を指定するとエラーとなります。
パーミッションをシンボルで指定した場合,何も指定されていない状態(数値表現での0)に対して設定,追加および削除をします。1つまたは複数のシンボルで指定された結果が検索に使用されます。
シンボルは3つの部分から構成されます。次に示すシンボルを1つまたは複数指定します。複数指定する場合は,コンマ(,)でシンボル間を区切ります。
シンボル内の順序
指定できる値
1つ目
アクセス権を設定する項目を指定します。複数同時に指定できます。
指定できる項目を次に示します。省略するとすべてのユーザーが仮定されます。
-
u:所有者
-
g:グループ
-
o:その他
-
a:全ユーザー
2つ目
モードに対する操作を指定します。1つ目のシンボルで指定した項目に対して次の処理をします。
-
=:アクセス権の設定(上書き)
-
+:アクセス権の追加
-
-:アクセス権の削除
設定,追加および削除する値は,3つ目のシンボルで指定します。
3つ目のシンボルに続いて2つ目および3つ目のシンボルを記述できます。3つ目のシンボルは省略できます。
3つ目
設定するアクセス権を指定します。複数同時に指定できます。指定できる値を次に示します。
-
r:読み取り
-
w:書き込み
-
x:実行
-
s:実行時にユーザーまたはグループIDを設定する
-
t:スティッキービット
-
u:モードに現在設定されている所有者のアクセス権
-
g:モードに現在設定されているグループのアクセス権
-
o:モードに現在設定されているその他のアクセス権
省略するとアクセス権を設定する項目を消去します。消去した値を2つ目のシンボルに従って設定,追加および削除します。追加および削除だけでは値は変化しません。
sとtの指定は,1つ目でoだけを指定した場合には無視されます。
シンボルの指定例を次の表に示します。
-permの指定値
同等の数値指定
説明
u=x,g=w
120
uに対してxを設定し,gに対してwを設定しています。
u=x,g=u
110
uに対してxを設定し,gに対してuと同じ値を設定しています。
u=x,=u
111
uに対してxを設定し,そのあとa(省略値)にuと同じ値を設定しています。
u=x,u=w
200
uに対してxを設定し,その後uに対してwを設定(上書き)しています。
u=x,u+w
300
uに対してxを設定し,その後uに対してwを追加しています。
ug=x
110
uとgに対してxを設定しています。
u=rw
600
uに対してrおよびwを設定しています。
u=r+x
500
uに対してrを設定し,xを追加しています。
u=r=w
200
uに対してrを設定し,さらにwを設定(上書き)しています。
=x,u=
011
a(省略値)にxを設定し,uの設定を消去しています。
=
000
a(省略値)を消去しています。
-
-
検索したファイルまたはディレクトリのパス名を標準出力に出力して改行します。常に真です。
- -print0
-
検索したファイルまたはディレクトリのパス名とNULL('\0')を標準出力に出力します。常に真です。
- -prune
-
検索中に遭遇したディレクトリはたどらないようにします。常に真です。-dオプションが指定されている場合は無効となります。
- -size サイズ[c]
-
ファイルのサイズが,指定したサイズブロック(512バイト単位に切り上げ)の場合は真です。サイズのあとにcを指定するとバイト単位で評価します。
サイズは符号を指定しないか,+または-の符号を付けた数値を指定することで,次のように扱われます。
-
符号を指定しない場合:指定した時間差
-
+を前置した場合:指定値より大きい
-
-を前置した場合:指定値より小さい
nの範囲は9223372036854775807(0x7fffffffffffffff)までで,それ以上を指定しても9223372036854775807となります。
サイズに数値以外を指定した場合,エラーメッセージ(find: プライマリ: 指定した文字列: illegal numeric value)を出力します。
サイズを指定しなかった場合,エラーメッセージ(find: プライマリ: requires additional arguments)を出力します。
-
- -type タイプ
-
現在のファイルのタイプが指定したタイプと等しい場合は真です。タイプを次に示します。次のタイプ以外を指定した場合は,エラーメッセージ(find: -type: 指定した値: unknown type)が出力されます。
-
b:ブロック型スペシャルファイル(Windowsでは指定できません)
-
c:キャラクタ型スペシャルファイル(Windowsでは指定できません)
-
d:ディレクトリ
-
f:通常ファイル
-
l:シンボリックリンク(Windowsでは指定できません)
-
p:FIFO(Windowsでは指定できません)
-
s:ソケット(Windowsでは指定できません)
-
- -user ユーザー名
-
Windowsの場合,ファイルの所有者がユーザー名のときは真です。
UNIXの場合,ファイルの所有者がユーザー名のときは真です。ユーザー名に数値を指定し,その所有者名が存在しないときはユーザーIDとして評価します。
- -xdev
-
常に真です。UNIXの場合,検索を開始したディレクトリのデバイス番号と異なるディレクトリは,検索しないようにします。
-
演算子
プライマリは次の演算子と共に使用できます。優先度の高い順に示します。
- ( 検索式 )
-
括弧演算子内の検索式が条件を満たす場合,真です。
- ! 検索式
-
!演算子に続く検索式が条件を満たす場合,偽です。
- 検索式 -and 検索式|検索式 -a 検索式|検索式 検索式
-
検索式を-and演算子もしくは-a演算子で接続する,または検索式を2つ並べると論理積となります。2つの検索式が真の場合,真です。最初の検索式が偽の場合,2つ目の検索式は評価されません。
- 検索式 -or 検索式|検索式 -o 検索式
-
検索式を-or演算子または-o演算子で接続すると論理和になります。どちらかの検索式が真の場合,真です。
-
終了コード
終了コード |
意味 |
---|---|
0 |
正常終了 |
1以上 |
エラー終了 |
注意事項
-
findを実行するシェルによっては,セミコロンや括弧などにエスケープ文字(\)を使用するか,シングルクォーテーション(')またはダブルクォーテーション(")で囲む必要があります。
-
検索したファイルやディレクトリの出力順序は,OSやファイルシステムによって異なります。そのため,複数プラットフォームでの動作の一貫性を期待する場合は,出力結果をsortする必要があります。
-
Windowsの場合,-execプライマリなどで生成したプロセスにファイルディスクリプタが引き継がれないで,クローズされた状態になります。例えば,親プロセスがオープンしていたファイルディスクリプタに対して再度オープンしないで入出力を行おうとするとエラーになります。ただし,標準入力,標準出力および標準エラー出力は再度オープンされた状態になります。
-
Windowsの場合,-execオプションに指定したプログラム名にパスが含まれていないときは,プログラムを実行するWindows APIのパス検索順序で見つかったプログラムが実行されます。
使用例
-
「.c」で終わる名称のファイルやディレクトリを表示します。
$ find . -name '*.c' ./test/a.c ./test/b.c ./test/c.c ./test/abc.c $
-
ファイルtttより古い,または所有者がrootではないファイルやディレクトリを表示します。
$ ls -l 合計 0 -rw-rw-r-- 1 user1 group1 0 10月 7 10:12 a.c -rw-rw-r-- 1 root group1 0 10月 7 10:12 abc.c -rw-rw-r-- 1 user1 group1 0 10月 7 10:12 b.c -rw-rw-r-- 1 user1 group1 0 10月 7 10:10 c.c -rw-rw-r-- 1 user1 group1 0 10月 7 10:11 ttt $ find . \! \( -newer ttt -user root \) . ./ttt ./b.c ./a.c ./c.c $
-
カレントディレクトリの下にある,ファイル名がドット(.)と1桁の数字で終わるファイルを表示します。ただし,command1ディレクトリはスキップします。
$ ls command1 command2 command1: a1.txt b1.txt command1 command1.1 command1.c command1.o extern.h obj command2: a2.txt b2.txt command2 command2.1 command2.c command2.o extern.h obj $ find . ! -path './command1/*' -name '*.[0-9]' ./command2/command2.1 $
-
カレントディレクトリの下にある,すべての*.oファイルを削除します。
$ ls command1 command2 command1: a1.txt b1.txt command1 command1.1 command1.c command1.o extern.h obj command2: a2.txt b2.txt command2 command2.1 command2.c command2.o extern.h obj $ find . -name '*.o' -exec rm {} \; $ ls command1 command2 command1: a1.txt b1.txt command1 command1.1 command1.c extern.h obj command2: a2.txt b2.txt command2 command2.1 command2.c extern.h obj $
-
オプションエラーのメッセージを表示します。
このメッセージは,コマンドを実行するプラットフォームによって異なる場合があります。Windowsの例を次に示します。
C:\TEMP>%ADSH_OSCMD_DIR%\find -w find: illegal option -- w usage: find [-dHhL] path ... [expression]