効率よく結果を出す法則とは……?

Linuxコマンド「find」とオプションの使い方(ファイルやディレクトリ・フォルダを検索する)

「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

-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」コマンドでファイルやディレクトリ(フォルダ)を検索することができる。
  • 検索対象のファイルやディレクトリ(フォルダ)はパスで指定することができる。
  • オプションを使うことで、ファイル名やファイルタイプといった さまざまな条件を指定して検索することができる。