ファイルなどを検索する!findコマンドの詳細まとめ【Linuxコマンド集】

findコマンド
  • このエントリーをはてなブックマークに追加
  • Pocket

findはファイルやディレクトリを検索するコマンドだ。

作成したファイルがどこにあるかわからなくなった時はもちろん、Linuxを利用する上で設定ファイルを探すということはよくあることだ。

このページでは、findコマンドの基本的な使用方法の解説に併せ、便利な使い方も紹介する。

ぜひ参考にしてほしい。

目次

findコマンドの基本

findコマンドの基本動作

findは、その通り検索のコマンドだ。ファイルやディレクトリを検索する。

基本的な書式は次のようになる。

$ find ファイル名

findに続き、検索するファイル名を指定する。

例えば、workディレクトリ内のtest01.datを検索する場合は、次のようになる。

$ find ./work/test01.dat

findコマンドの基本

workディレクトリ内のtest01.datが検索された。

上記findコマンドを試すなら下のコマンドをLinux上で実行すればすぐに再現可能だ。

検索するファイルがなければエラーが表示される。

workディレクトリ内のtest10.datは存在しないが、検索してみる。

$ find ./work/test10.dat

findコマンド エラー

「そのようなファイルやディレクトリはありません」とエラーが表示された。

findコマンドの便利な判別式や演算子、アクションたち

判別式や演算子、アクションの一覧

後から詳細をご紹介するが、まずは一覧で見てみよう。

判別式 -name

ワイルドカードを使用して、ファイルやディレクトリ名の一部のみ指定した検索ができる。

判別式 -atime

任意の日数にアクセスされたファイルやディレクトリを検索する。

判別式 -mtime

任意の日数に更新されたファイルやディレクトリを検索する。

判別式 -amin

任意の分数にアクセスされたファイルやディレクトリを検索する。

判別式 -mmin

任意の分数に更新されたファイルやディレクトリを検索する。

判別式 -anewer

任意のファイルの更新日時よりも後にアクセスしたファイルやディレクトリを検索する。

判別式 -newer

任意のファイルの更新日時よりも後に変更したファイルやディレクトリを検索する。

判別式 -empty

ファイル容量が0のファイルやディレクトリを対象とし検索する。

判別式 -size

ファイル容量を指定し検索する。

判別式 -type f

ファイルのみを対象とし検索する。

判別式 -type d

ディレクトリを対象とし検索する。

判別式 -perm

パーミッションで検索する。

演算子 -and

複数の条件を使って、すべての条件に当てはまるファイルやディレクトリを検索する。

演算子 -or

複数の条件を使って、いずれかの条件に当てはまるファイルやディレクトリを検索する。

演算子 -not

条件に当てはまらないファイルやディレクトリを検索する

アクション -exec

検索結果に対してコマンドを実行する。

 

かなり長くなってしまったが、それぞれ詳細を紹介していく。

-name:ワイルドカードを使用して、ファイルやディレクトリ名の一部のみを指定し検索する

ファイル名やディレクトリ名が一部しかわからない場合でもワイルドカードを使って検索できる。

ワイルドカードは直前に「\」でエスケープしないとエラーや想定した動作にならない。

$ find 検索先 -name ファイル名

workディレクトリ内の拡張子.datのファイルを検索する場合は、次のとおりだ。

$ find work -name \*.dat

find -nameオプション

拡張子.datのファイルのみ表示された。

-nameを記述せずに、

$ find ./work/ *.dat

と記述することで、同じ動作をすることもできる。

-atime:任意の日数にアクセスされたファイルやディレクトリを検索する

指定した日にアクセスしたファイルやディレクトリを検索できる判別式だ。

日数は、今日が0、昨日が1である。

$ find 検索先 -atime 日数

今日アクセスしたファイルを検索する場合は、次のとおりだ。

$ find ./work/ -atime 0

find -atimeオプション

今日アクセスされたファイルが表示された。

 

任意の日数以内にアクセスされたファイルやディレクトリをすべて表示したい場合は、日数に-を付ける。

3日以内にアクセスされたファイルやディレクトリを検索する場合は、次のとおりだ。

$ find ./work/ -atime -3

find -atimeオプション 2

今日から3日以内にアクセスされたファイルが表示された。

任意の日数前までにアクセスされたファイルやディレクトリをすべて表示したい場合は、日数に+を付ける。

3日よりも前にアクセスされたファイルやディレクトリを検索する場合は、次のとおりだ。

$ find ./work/ -atime +3

find -atime 3

今日から3日よりも前にアクセスされたファイルが表示された。

-mtime:任意の日数に更新されたファイルやディレクトリを検索する。

指定した日に変更を行ったファイルやディレクトリを検索できる判別式だ。

日数は、今日が0、昨日が1である。

$ find -mtime 日数

今日変更を行ったファイルを検索する場合は、次のとおりだ。

$ find -mtime 0

find -mtimeオプション

今日変更されたファイルが表示された。

任意の日数以内に変更を行ったファイルをすべて表示したい場合は、日数に-を付ける。

10日以内に変更されたファイルを検索する場合は、次のとおりだ。

$ find ./work/ -mtime -10

find -mtimeオプション 2

10日以内に変更されたファイルが表示された。

任意の日数前までに変更を行ったファイルをすべて表示したい場合は、日数に+を付ける。

20日よりも前に変更されたファイルを検索する場合は、次のとおりだ。

$ find ./work/ -mtime +20

find -mtimeオプション3

20日より前に変更されたファイルが表示された。

-amin:任意の分数以前にアクセスされたファイルやディレクトリを検索する

指定した時間にアクセスしたファイルやディレクトリを検索できる判別式だ。

$ find 検索先 -amin 分数

直前にアクセスしたファイルを検索する場合は、次のとおりだ。

$ find ./work/ -amin 1

find -aminオプション

直前にアクセスされたファイルが表示された。

任意の時間以内にアクセスされたファイルをすべて表示したい場合は、分に-を付ける。

25分以内にアクセスされたファイルを検索する場合は、次のとおりだ。

$ find ./work/ -amin -25

find -aminオプション

今から25分以内にアクセスされたファイルが表示された。

任意の時間の前までにアクセスされたファイルをすべて表示したい場合は、分に+を付ける。

25分よりも前にアクセスされたファイルを検索する場合は、次のとおりだ。

$ find ./work/ -amin +25

find -aminオプション

今から25分よりも前にアクセスされたファイルが表示された。

-mmin:任意の時間に更新されたファイルやディレクトリを検索する。

指定した時間に変更を行ったファイルの場所を検索できる判別式だ。

$ find -mtime 分数

今変更を行ったファイルを検索する場合は、次のとおりだ。

$ find -mmin 1

find -mminオプション

今変更されたファイルが表示された。

任意の時間までに変更を行ったファイルをすべて表示したい場合は、分数に-を付ける。

12時間以内に変更されたファイルを検索する場合は、次のとおりだ。

$ find ./work/ -mmin -720

find -mminオプション

12時間(720分)以内に変更されたファイルが表示された。

任意の時間までに変更を行ったファイルをすべて表示したい場合は、分数に+を付ける。

20時間よりも前に変更されたファイルを検索する場合は、次のとおりだ。

$ find ./work/ -mmin +1200

find -mminオプション 3

20時間(1200分)より前に変更されたファイルが表示された。

-anewer:任意のファイルの更新日時よりも後にアクセスしたファイルやディレクトリを検索する。

あるファイルの更新日時と比べて、アクセスした時間がそれ以降のファイルを検索する。

$ find 検査元 -anewer 元ファイル名

workディレクトリ内のtest02.datの変更日時よりも後にアクセスしたworkディレクトリ内のファイルを検索する場合は、次のとおりだ。

$ find ./work/ -anewer ./work/test02.dat

find -anewerオプション

-newer:任意のファイルの更新日時よりも後に更新したファイルやディレクトリを検索する

あるファイルの更新日時と比べて、更新した時間がそれ以降のファイルを検索する。

$ find 検査元 -newer 元ファイル名

workディレクトリ内のtest03.datの変更日時よりも後に更新したworkディレクトリ内のファイルを検索する場合は、次のとおりだ。

$ find ./work/ -newer ./work/test03.dat

find -newerオプション

-empty:ファイルやディレクトリの容量がないものを検索する

空のものを検索する判別式だ。

$ find 検査元 -empty

workディレクトリ内のファイル容量が0のものを検索する場合は、次のとおりだ。

$ find ./work/ -empty

find -empty

-size:ファイルの容量を指定し検索する

ファイルの容量を指定して検索する判別式だ。

初期設定では、ファイル容量が指定したものを検索する。

指定したファイル容量以上のものを検索する場合はファイル容量の前に+を、以下の場合はマイナスを付与する。

ファイル容量の後ろにcを付与すると単位がByteとなり、kを付与するとkByteとなる。

$ find 検索元 -size ファイル容量

workディレクトリ内のファイル容量が6byte以下のファイルを検索する場合は、次のとおりだ。

$ find ./work/ -size -6c

find -sizeオプション

-type f :ファイルのみを対象とし検索する

検索対象をファイルのみに限定して検索する判別式だ。検索対象のタイプに「file」を指定する形になる。

$ find ファイル名 -type f

workディレクトリ内のファイル名に01が含まれるファイルのみを検索する場合は、次のとおりだ。

$ find ./work/*01* -type f

find -type fオプション

-type d :ディレクトリを対象とし検索する

上の「-type f」と同じパターンだ。dを指定することで、検索対象をディレクトリのみに限定して検索する判別式になる。

$ find ディレクトリ名 -type d

workディレクトリ内のディレクトリ名に01が含まれるディレクトリのみを検索する場合は、次のとおりだ。

$ find ./work/*01* -type d

find -type d オプション

-perm:パーミッションで検索する

ある特定のパーミッションで検索する判別式だ。

$ find 検索元 -perm パーミッション

または

$ find 検索元 -perm -対象者=アクセス権

対象者は、所有者がu、グループがg、その他のユーザーがo、全対象者がaとなる。

アクセス権は、読み込み権限がr、書き込み権限がw、実行権限がxとなる。

workディレクトリ内のパーミッションが664を検索する場合は、次のとおりだ。

$ find ./work/ -perm 664

find -permオプション

アクセス権限が664(-rw-rw-r--)のものが検索された。

workディレクトリ内の所有者が実行権限を持つものを検索する場合は、次のとおりだ。

$ find ./work/ -u=x

find -permオプション

所有者に実行権限が設定されている(アクセス権限が-rwxrw-rw-)のものが検索された。

-and:複数の条件を使って、すべての条件に当てはまるファイルやディレクトリを検索する

複数の検索条件を使って、すべての条件が満たしているファイルやディレクトリのみを検索する演算子だ。

$ find 検索元 検索条件1 -and 検索条件2

workディレクトリ内の名称に2が入っていて、なおかつパーミッションが664のものを検索する場合は、次のとおりだ。

$ find ./work/ -name \*2\* -and -perm 664

find -andオプション

ファイル名称に2が入っていて、なおかつ、アクセス権限が664(-rw-rw-r--)のものが検索された。

-or:複数の条件を使って、いずれかの条件に当てはまるファイルやディレクトリを検索する

複数の検索条件を使って、いずれかの条件を満たしているファイルやディレクトリを検索する演算子だ。

$ find 検索元 検索条件1 -or 検索条件2

workディレクトリ内の名称に4が入っている、またはパーミッションが766のものを検索する場合は、次のとおりだ。

$ find ./work/ -name \*4\* -or -perm 766

find -orオプション

ファイル名称に4が入っている、または、アクセス権限が766(-rwxrw-rw-)のものが検索された。

-not:条件に当てはまらないファイルやディレクトリを検索する

検索条件に当てはまらないファイルやディレクトリを検索する演算子だ。

$ find -not 検索元 検索条件

workディレクトリ内の所有者に実行権限のないものを検索する場合は、次のとおりだ。

$ find ./work/ -not -perm -u=x

find -notオプション

workディレクトリ内の所有者に実行権限があるものは検索されず、それ以外が検索された。

-exec:検索結果に対してコマンドを実行する

検索した結果に対して、何らかのアクションを自動で実行させることができるものだ。

$ find 検索元 検索ファイル名 -exec 実行するコマンド \;

workディレクトリ内の拡張子.datを探し、圧縮ファイルtest.zipに追加していく場合は、次のとおりだ。

*は\でエスケープする。また、対象となる全ファイルという意味で{}を記述している。

$ find ./work/ -name \*.dat -exec zip ./work/test.zip {}  \;

find -execオプション

workディレクトリ内の拡張子.datのファイルがtest.zipに次々と圧縮されている。

workディレクトリ内のパーミッションが644のものを探し、パーミッションを666に変更する場合は、次のとおりだ。

$ find ./work/ -perm 664 -exec chmod 666 {}  \;

find -execオプション

workディレクトリ内のパーミッションが644のファイルのパーミッションが666に変更された。

findコマンドと類似のコマンド群

最後にfindコマンドに関連して、基本的なファイル検索のコマンドも紹介しておく

grepコマンド

ファイルの中のワードで検索を行うコマンドだ。こちらもLinuxを使う上で必須コマンドになっている。

まとめ

findで検索できる形式は、名前、名前の一部、更新日時、ファイルサイズなどがある。検索した結果に対しては、他のコマンドを組み合わせることで何かの処理をすることも可能だ。

CMSをLinuxサーバーにインストールする作業の中では、ある条件のファイルのみにパーミッションを設定するような作業がよくある。そのような時はこのfindコマンドを使うことで効率がよくなるだろう。

findコマンドは基本のコマンドでありながら、応用性も高いコマンドなので、この機会にぜひ把握してほしいコマンドだ。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リカレントテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメント

  1. matsuand より:

    御社 findコマンドの説明において、重大な誤りがあります。
    -name や -atime などのことを、十把一絡げに「オプション」と説明していますが、これはとんでもない誤りです。GNU findutils を対象としているとの前提で言いますが、Info ファイルを熟読すべきです。-name はテストとよびます。-a は演算子と呼びます。-exec はアクションと呼びます。オプションと呼べるのは、たとえば -regextype です。なおここで言う「オプション」は、通常よく用いられるコマンドライン上のオプションとは全く違う用語です。そのことも Info に明記されています。-name や -atime などをオプションと呼ぶ表現は、公式文書には存在しません。熟読の上、訂正すべきです。

  2. matsuand より:

    追記したい内容があるので、続けます。なお前コメントの続きとして、「オプション」という用語は find において特別な意味を設けて用いられており、それは「特定のファイル処理に対してではなく、全体的な処理に影響を及ぼす指定要素」のこと、と Info に記載されています。だから -name や -atime はこれに該当しないのです。これとは別の話として、-a を掲載せずに -and を説明されています。Linux 前提であれば、仕方ないことですが、ちなみに -and は POSIX 準拠していません。無難に -a を説明するべきではありませんか? 御社のポリシーに関わるところと思います。

    1. リカレントテクノロジー より:

      いつもご愛読ありがとうございます。

      記事に反映させていただきました。
      ご指摘ありがとうございました。

コメントを残す

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リカレントテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する