「find」コマンドを使うと、ファイルやディレクトリ(フォルダ)を検索することができます。
以下から Linuxコマンド「find」の具体的な使い方とオプションを解説していきます。
「find」コマンドの基本
「find」は以下のように検索対象と検索条件を指定して使います。
find 検索対象 検索条件
対象のファイルやディレクトリ(フォルダ)が存在するか検索する
コマンドでファイルやディレクトリ(フォルダ)の検索を試してみましょう。
まずは以下のコマンドで検索対象となるファイル「file1.txt」「file2.txt」「file3.txt」を作成して準備しておきます。
touch file1.txt
touch file2.txt
touch file3.txt
touch コマンドの詳しい使い方はこちら。
さらに以下のコマンドで「directory1」というディレクトリも用意しておきます。
mkdir directory1
mkdir コマンドの詳しい使い方はこちら。
それでは作成したファイルやディレクトリ(フォルダ)を使って検索を試してみましょう。
まずは検索条件を指定せずに検索対象のみを指定して、対象のファイルやディレクトリ(フォルダ)が存在するか検索する例です。
find file1.txt
コマンドを実行すると、このように対象のファイル名やディレクトリ(フォルダ)名が表示されます。
ここで以下のように存在しないファイルやディレクトリ(フォルダ)で検索してみましょう。
find file100.txt
すると以下のようにエラーが表示されます。
他のディレクトリ(フォルダ)にあるファイルやディレクトリを検索する
検索対象のファイルやディレクトリ(フォルダ)はパスで指定することができます。
パスの詳しい解説はこちら。
例えば「directory1」の中にある「file4.txt」という名前のファイルを検索する場合は、以下のコマンドになります。
find directory1/file4.txt
また、「directory1」の中にあるファイルやディレクトリ(フォルダ)のすべてを検索対象にする場合は、以下のコマンドになります。
find directory1
カレントディレクトリの中にあるファイルやディレクトリ(フォルダ)のすべてを検索対象にする場合は、このようになります。
find .
ファイルやディレクトリ(フォルダ)の名前を指定して検索する
ここまでは検索対象のみを指定してきましたが、ここからは検索対象も指定して検索してみます。
名前にある文字が含まれるファイルやディレクトリ(フォルダ)を検索したいときは、-name
オプションを使います。
以下は、「directory1」の中から ファイル名やディレクトリ(フォルダ)名の先頭に「file」が含まれるものを検索するコマンド例。
find directory1 -name "file*"
ファイルタイプを指定して検索する
ファイルのみ、もしくはディレクトリ(フォルダ)のみを検索対象にしたい場合は、-type
オプションを使います。
以下は、「directory1」の中からファイルのみを検索するコマンド例。
find directory1 -type f
複数のオプションを組み合わせて検索する
複数のオプションを組み合わせて検索することもできます。
以下は、「directory1」の中から 名前の先頭に「file」が含まれるディレクトリ(フォルダ)のみを検索するコマンド例。
find directory1 -name "file*" -type d
ここまでが「find」コマンドの基本!
「find」コマンドの応用
「find」コマンドの理解をさらに深めたい方は以下もご覧ください。
複数のファイルやディレクトリ(フォルダ)をまとめて検索する
半角スペースで区切って複数のファイルを指定することで、それらのファイルやディレクトリ(フォルダ)をまとめて検索することができます。
例えば以下のようにすると、「file1.txt」と「file2.txt」と「file3.txt」が存在するかを まとめて検索することができます。
find file1.txt file2.txt file3.txt
以下のように検索条件を加えることもできます。
find file1.txt file2.txt file3.txt -type f
特定の名前が含まれるファイルやディレクトリ(フォルダ)をまとめて検索する
ワイルドカード(*
)を使うことで、特定の名前が含まれているファイルやディレクトリ(フォルダ)をまとめて検索することができます。
例えば以下のようにすると、末尾に「.txt」がついているファイルやディレクトリ(フォルダ)だけをまとめて検索することができます。
find *.txt
以下のように検索条件を加えることもできます。
find *.txt -type f
検索条件で使える演算子
検索条件の中では、ここで紹介する演算子を使って複雑な条件を指定することもできます。
-a, -and
-a
または -and
オプションを使うと、複数の条件式すべてに一致するファイルやディレクトリを検索することができます。
名前に「file」と「txt」が含まれるファイルやディレクトリを検索するコマンド例
find ./ -name "*file*" -and -name "*txt*"
条件式を並べて書いた場合はデフォルトで -a
, -and
の扱いになるため、上のコマンドは以下のように省略することもできます。
find ./ -name "*file*" -name "*txt*"
-o, -or
-o
または -or
オプションを使うと、複数の条件式のいずれかに一致するファイルやディレクトリを検索することができます。
名前に「file」または「txt」が含まれるファイルやディレクトリを検索するコマンド例
find ./ -name "*file*" -or -name "*txt*"
!, -not
!
または -not
オプションを使うと、その直後に書いた条件式を否定形にすることができます。
名前に「txt」が含まれないファイルやディレクトリを検索するコマンド例
find ./ -not -name "*txt*"
「find」の検索条件オプション一覧
find コマンドの検索条件に使えるオプションを一覧でまとめました。
-amin
-atime
オプションをつけると、指定した分数前にアクセスされたファイルやディレクトリを検索することができます。
数字の前に +
をつけると分数以前、-
をつけると分数以降の検索もできます。
現在から5分前にアクセスされたファイルやディレクトリを検索するコマンド例
find ./ -amin 5
5分以前にアクセスされたファイルやディレクトリを検索するコマンド例
find ./ -amin +5
5分前より後にアクセスされたファイルやディレクトリを検索するコマンド例
find ./ -amin -5
-anewer
-anewer
オプションをつけると、指定したファイルよりアクセス日時が新しいファイルやディレクトリを検索することができます。
「file1.txt」よりアクセス日時が新しいファイルやディレクトリを検索するコマンド例
find ./ -anewer file1.txt
-atime
-atime
オプションをつけると、指定した日数前にアクセスされたファイルやディレクトリを検索することができます。
数字の前に +
をつけると日数以前、-
をつけること日数以降の検索もできます。
現在から3日前にアクセスされたファイルやディレクトリを検索するコマンド例
find ./ -atime 3
今日 アクセスされたファイルやディレクトリを検索するコマンド例
find ./ -atime 0
3日以前にアクセスされたファイルやディレクトリを検索するコマンド例
find ./ -atime +3
3日前より後にアクセスされたファイルやディレクトリを検索するコマンド例
find ./ -atime -3
-cmin
-cmin
オプションをつけると、指定した分数前にステータスが更新されたファイルやディレクトリを検索することができます。
数字の前に +
をつけると分数以前、-
をつけること分数以降の検索もできます。
現在から5分前にステータスが更新されたファイルやディレクトリを検索するコマンド例
find ./ -cmin 5
5分以前にステータスが更新されたファイルやディレクトリを検索するコマンド例
find ./ -cmin +5
5分前より後にステータスが更新されたファイルやディレクトリを検索するコマンド例
find ./ -cmin -5
-cnewer
-cnewer
オプションをつけると、指定したファイルよりステータス更新日時が新しいファイルやディレクトリを検索することができます。
「file1.txt」よりステータス更新日時が新しいファイルやディレクトリを検索するコマンド例
find ./ -cnewer file1.txt
-ctime
-ctime
オプションをつけると、指定した日数前にステータスが更新されたファイルやディレクトリを検索することができます。
数字の前に +
をつけると日数以前、-
をつけること日数以降の検索もできます。
現在から3日前にステータスが更新されたファイルやディレクトリを検索するコマンド例
find ./ -ctime 3
今日 ステータスが更新されたファイルやディレクトリを検索するコマンド例
find ./ -ctime 0
3日以前にステータスが更新されたファイルやディレクトリを検索するコマンド例
find ./ -ctime +3
3日前より後にステータスが更新されたファイルやディレクトリを検索するコマンド例
find ./ -ctime -3
-delete
-delete
オプションをつけると、対象のファイルを削除することができます。
-depth
-depth
オプションをつけると、ディレクトリ本体の前に、ディレクトリの内容を先に評価します。
-empty
-empty
オプションをつけると、サイズがゼロのファイル、または中身が空のディレクトリを検索することができます。
-exec
-exec
オプションをつけると、検索結果のファイルに対して指定したコマンドを実行することができます。
ファイル名の末尾に「.txt」が含まれるファイルのパーミッションを644に変更するコマンド例
find ./ -name "*.txt" -exec chmod 644 {} \;
-executable
-executable
オプションをつけると、実行可能なファイルを検索することができます。
-follow
-follow
オプションをつけると、シンボリックリンクの参照先を検索することができます。
-fprint
-fprint
オプションをつけると、検索結果のパスを指定したファイルに出力することができます。
同じ名前のファイルがある場合は上書きします。
検索結果のパスを「file1.txt」に出力するコマンド例
find ./ -fprint file1.txt
-gid
-gid
オプションをつけると、指定したグループIDのファイルを検索することができます。
グループIDが3のファイルを検索するコマンド例
find ./ -gid 3
-group
-group
オプションをつけると、指定したグループ名のファイルを検索することができます。
IDで指定することもできます。
グループ名が「owner」のファイルを検索するコマンド例
find ./ -group owner
-iname
-iname
オプションをつけると、ファイルやディレクトリ名を指定して検索することができます。
-name
オプションとほぼ同様の機能ですが、こちらは大文字・小文字を区別しません。
ワイルドカード(*
)を使うことで一部の名前が含まれるファイルやディレクトリ検索することができます。
名前の末尾に「.txt(大文字も可)」が含まれるファイルやディレクトリを検索するコマンド例
find ./ -iname "*.txt"
-inum
-inum
オプションをつけると、inode 番号を指定して検索することができます。
inode 番号が 10000 のファイルやディレクトリを検索するコマンド例
find ./ -inum 10000
-ipath
-ipath
オプションをつけると、指定したパスに一致するファイルやディレクトリを検索することができます。
-path
オプションとほぼ同様の機能ですが、こちらは大文字・小文字を区別しません。
パスに「document(大文字も可)」が含まれるファイルやディレクトリを検索するコマンド例
find ./ -path "*document*"
-iregex
-iregex
オプションをつけると、指定したファイル名やパスに一致するファイルやディレクトリを検索することができます。
-regex
オプションとほぼ同様の機能ですが、こちらは大文字・小文字を区別しません。
ファイル名やパスに「document(大文字も可)」が含まれるファイルやディレクトリを検索するコマンド例
find ./ -iregex ".*document.*"
-ls
-ls
オプションをつけると、検索結果のファイルの詳細情報を表示することができます。
ls -dils
コマンドと同じ形式で出力します。
-maxdepth
-maxdepth
オプションをつけると、何階層下のパスまで検索するか指定することができます。
カレントディレクトリから2階層下までを検索対象にするコマンド例
find ./ -maxdepth 2
-mindepth
-mindepth
オプションをつけると、何階層下のパスまで対象に含めずに検索するか指定することができます。
カレントディレクトリから2階層下までを検索対象に含めないコマンド例
find ./ -mindepth 2
-mmin
-mmin
オプションをつけると、指定した分数前に変更されたファイルやディレクトリを検索することができます。
数字の前に +
をつけると分数以前、-
をつけること分数以降の検索もできます。
現在から5分前に変更されたファイルやディレクトリを検索するコマンド例
find ./ -mmin 5
5分以前に変更されたファイルやディレクトリを検索するコマンド例
find ./ -mmin +5
5分前より後に変更されたファイルやディレクトリを検索するコマンド例
find ./ -mmin -5
-mount
-mount
オプションをつけると、別のファイルシステムの領域の中は検索しないようにすることができます。
-mtime
-mtime
オプションをつけると、指定した日数前に変更されたファイルやディレクトリを検索することができます。
数字の前に +
をつけると日数以前、-
をつけること日数以降の検索もできます。
現在から3日前に変更されたファイルやディレクトリを検索するコマンド例
find ./ -mtime 3
今日 変更されたファイルやディレクトリを検索するコマンド例
find ./ -mtime 0
3日以前に変更されたファイルやディレクトリを検索するコマンド例
find ./ -mtime +3
3日前より後に変更されたファイルやディレクトリを検索するコマンド例
find ./ -mtime -3
-name
-name
オプションをつけると、ファイルやディレクトリ名を指定して検索することができます。
ワイルドカード(*
)を使うことで一部の名前が含まれるファイルやディレクトリ検索することができます。
名前の末尾に「.txt」が含まれるファイルやディレクトリを検索するコマンド例
find ./ -name "*.txt"
-newer
-newer
オプションをつけると、指定したファイルよりタイムスタンプが新しいファイルやディレクトリを検索することができます。
「file1.txt」よりタイムスタンプが新しいファイルやディレクトリを検索するコマンド例
find ./ -newer file1.txt
-newermt
-newermt
オプションをつけると、指定した日時以降に変更されたファイルやディレクトリを検索することができます。
2018年1月1日以降に変更されたファイルやディレクトリを検索するコマンド例
find ./ -newermt '2018-01-01'
2018年1月1日00時15分30秒以降に変更されたファイルやディレクトリを検索するコマンド例
find ./ -newermt '2017-05-26 00:15:30'
-ok
-ok
オプションをつけると、検索結果のファイルに対して指定したコマンドを実行することができます。
-exec
オプションとほぼ同様の機能ですが、こちらは指定したコマンドを実行する前に確認を入れてくれます。
ファイル名の末尾に「.txt」が含まれるファイルのパーミッションを 確認しながら644に変更するコマンド例
find ./ -name "*.txt" -ok chmod 644 {} \;
-path
-path
オプションをつけると、指定したパスに一致するファイルやディレクトリを検索することができます。
パスに「document」が含まれるファイルやディレクトリを検索するコマンド例
find ./ -path "*document*"
-perm
-perm
オプションをつけると、パーミッションを指定して検索することができます。
パーミッションが644のファイルやディレクトリを検索するコマンド例。
find ./ -perm 644
-print
オプションをつけると、検索結果のパスを標準出力することができます。
このアクションはデフォルトの動作になります。
-printf
-print
オプションをつけると、検索結果の出力フォーマットを変えることができます。
ファイルサイズとパスを出力するコマンド例
find ./ -printf "%s %p\n"
指定できるおもなフォーマット
%a |
最終アクセス日時 |
%f |
ファイル名 |
%g |
グループ |
%p |
パス |
%s |
サイズ |
%t |
最終更新日時 |
%u |
ユーザー |
-prune
-prune
オプションをつけると、指定したパスより下の階層は検索から除外することができます。
-regex
-regex
オプションをつけると、指定したファイル名やパスに一致するファイルやディレクトリを検索することができます。
ファイル名やパスに「document」が含まれるファイルやディレクトリを検索するコマンド例
find ./ -regex ".*document.*"
-size
-size
オプションをつけると、ブロックサイズやファイルサイズを指定して検索することができます。
数字の前に +
をつけると 指定したサイズ以上、-
をつけると 指定したサイズ以下のファイルを検索することもできます。
また、数字の後に単位を表す文字をつけることもできます。
ブロックサイズが10のファイルやディレクトリを検索するコマンド例
find ./ -size 10
ブロックサイズが10以上のファイルやディレクトリを検索するコマンド例
find ./ -size +10
ブロックサイズが100キロバイト以下のファイルやディレクトリを検索するコマンド例
find ./ -size -100k
指定できる単位
b |
ブロック |
c |
バイト |
k |
キロバイト |
M |
メガバイト |
G |
ギガバイト |
-type
-type
オプションをつけると、ファイルの種類を指定して検索することができます。
ファイルのみを検索するコマンド例
find ./ -type f
ディレクトリのみを検索するコマンド例
find ./ -type d
指定できるファイルの種類
f |
ファイル |
d |
ディレクトリ |
l |
シンボリックリンク |
-uid
-uid
オプションをつけると、ファイルのユーザーIDを指定して検索することができます。
ユーザーIDが1000のファイルを検索するコマンド例
find ./ -uid 1000
-user
-user
オプションをつけると、ファイルのユーザーを指定して検索することができます。
ユーザーが root のファイルを検索するコマンド例
find ./ -user root
-writable
-writable
オプションをつけると、書き込み可能なファイルを検索することができます。
-xdev
-xdev
オプションをつけると、別のファイルシステムの領域の中は検索しないようにすることができます。
「find」のオプション一覧
find コマンドで使えるオプションを一覧でまとめました。
-D オプション
-D
オプションをつけると、診断用の情報を出力できます。デバッグに使用することができます。
以下の tree
のようなデバッグオプションと合わせて使います。
コマンド例
find -D tree *.txt
デバッグ用オプション一覧
help |
デバッグ用オプションの説明 |
tree |
検索式の構造 |
stat |
statやlstatを使ってファイルを調べたときのメッセージ |
opt |
検索式を最適化する情報 |
rates |
各処理の成功と失敗の回数 |
-H オプション
-H
オプションをつけると、指定されたファイルのシンボリックリンクを巡ります。
-L オプション
-L
オプションをつけると、ファイルがシンボリックリンク(あるディレクトリに別の場所にあるディレクトリをひも付けて、その名前でアクセスできるようにするしくみ)の場合は、シンボリックリンクが指しているファイルやディレクトリの情報を使います。
-O オプション
-O
オプションをつけると、最適化レベルを指定し 検査の順序を並べ替えることによって、実行速度を上げることができます。
-P オプション
-P
オプションをつけると、シンボリックリンク(あるディレクトリに別の場所にあるディレクトリをひも付けて、その名前でアクセスできるようにするしくみ)を辿りません。
ファイルがシンボリックリンクだったら、 そのシンボリックリンクそのものの情報を使います。
まとめ
以上、Linuxコマンド「find」の使い方でした!
ここまでの内容をまとめておきます。
- 「find」コマンドでファイルやディレクトリ(フォルダ)を検索することができる。
- 検索対象のファイルやディレクトリ(フォルダ)はパスで指定することができる。
- オプションを使うことで、ファイル名やファイルタイプといった さまざまな条件を指定して検索することができる。