findコマンドとは?Linuxでファイル・ディレクトリを検索する方法を初心者向けに解説

Linux

findコマンドとは、Linuxでファイルやディレクトリを検索するためのコマンドです。

Linuxでは、ファイルがどこにあるかわからなくなったり、特定の拡張子のファイルだけ探したり、更新日が古いログファイルを見つけたりする場面があります。

そのようなときに便利なのがfindコマンドです。

findコマンドを使うと、ファイル名、ディレクトリ名、ファイルの種類、更新日時、サイズなど、さまざまな条件を指定して検索できます。

また、grepコマンドと組み合わせることで、特定の名前のファイルを探すだけでなく、ファイルの中身まで検索する流れも作れます。

この記事では、Linux初心者向けにfindコマンドの意味、基本的な使い方、ファイル名検索、ディレクトリ検索、拡張子検索、更新日時検索、サイズ検索、grepとの違い、よくあるエラーまでわかりやすく解説します。

  1. findコマンドとは?
  2. findコマンドの基本的な使い方
  3. findコマンドを使う基本の流れ
  4. find . の意味
  5. find /tmp のように検索開始場所を指定する
  6. findでファイル名を検索する
  7. findで拡張子を指定して検索する
  8. ワイルドカードを引用符で囲む理由
  9. findで大文字小文字を無視して検索する
  10. findでディレクトリを検索する
  11. findで通常ファイルだけを検索する
  12. findの-typeでよく使う種類
  13. findでファイルサイズを指定して検索する
  14. findで更新日時を指定して検索する
  15. findで分単位の更新日時を指定する
  16. findで空ファイルを検索する
  17. findで権限を指定して検索する
  18. findで検索結果の件数を数える
  19. findで検索結果から文字列を探す
  20. find -execとは?
  21. findで見つけたファイルを削除する前の注意
  22. find -deleteを使うときの注意
  23. findでよく使うオプション一覧
  24. findとgrepの違い
  25. findとlsの違い
  26. findとlocateの違い
  27. findコマンドでよくあるエラー・つまずき
    1. No such file or directory
    2. Permission denied
    3. 検索結果が表示されない
    4. ワイルドカード検索がうまくいかない
    5. find -deleteで消しすぎてしまう
  28. findコマンドで検索できないときの確認ポイント
  29. findコマンドを安全に使うコツ
  30. findコマンドを使った練習手順
    1. 1. ホームディレクトリへ移動する
    2. 2. 練習用ディレクトリを作成する
    3. 3. 練習用ディレクトリへ移動する
    4. 4. 練習用ファイルを作成する
    5. 5. すべてのファイルとディレクトリを確認する
    6. 6. .logファイルを検索する
    7. 7. 通常ファイルだけを検索する
    8. 8. ディレクトリだけを検索する
    9. 9. 検索結果の件数を数える
  31. findコマンドを覚えると何ができるようになる?
  32. findコマンドのよくある質問
    1. findコマンドは何に使いますか?
    2. findコマンドの基本形は何ですか?
    3. find . の「.」は何ですか?
    4. findでファイル名を検索するにはどうしますか?
    5. findで大文字小文字を無視して検索できますか?
    6. findでディレクトリだけ検索するにはどうしますか?
    7. findでファイルだけ検索するにはどうしますか?
    8. findで古いファイルを探すにはどうしますか?
    9. findで大きいファイルを探すにはどうしますか?
    10. findとgrepの違いは何ですか?
    11. findの検索結果の件数を数えるにはどうしますか?
    12. findで見つけたファイルを削除できますか?
    13. findで検索できない原因は何ですか?
  33. まとめ

findコマンドとは?

findコマンドとは、Linuxでファイルやディレクトリを検索するためのコマンドです。

findには「見つける」「探す」という意味があります。

Linuxのfindコマンドでは、指定した場所を起点にして、条件に一致するファイルやディレクトリを探せます。

たとえば、現在のディレクトリ配下からsample.txtを探したい場合は、次のように実行します。

find . -name "sample.txt"

このコマンドでは、現在のディレクトリを表す「.」から下を検索し、名前がsample.txtのファイルを探します。

findコマンドは、Linuxでファイルを探すときの基本コマンドです。

findコマンドの基本的な使い方

findコマンドの基本的な使い方は、次の通りです。

find 検索開始場所 条件

検索開始場所には、どこから探すかを指定します。

条件には、ファイル名、種類、更新日時、サイズなどを指定します。

たとえば、現在のディレクトリ配下からmemo.txtを探す場合は、次のように実行します。

find . -name "memo.txt"

「.」は現在のディレクトリを表します。

-nameは、名前を指定して検索するための条件です。

つまり、このコマンドは「現在のディレクトリ配下から、名前がmemo.txtのものを探す」という意味になります。

findコマンドを使う基本の流れ

Linux初心者は、findコマンドを単体で覚えるよりも、pwd、ls、grep、wcとセットで覚えると理解しやすいです。

基本の流れは次の通りです。

pwd
ls -la
find . -name "sample.txt"
find . -name "*.log"
find . -name "*.log" | wc -l

まずpwdで現在いるディレクトリを確認します。

次にls -laで、現在のディレクトリに何があるか確認します。

findで目的のファイルを検索します。

拡張子で検索したい場合は、*.logのようなワイルドカードを使います。

wc -lと組み合わせると、見つかった件数を数えることもできます。

この流れを覚えると、Linuxでファイルを探し、結果を確認する操作がしやすくなります。

find . の意味

findコマンドでよく使う「.」は、現在のディレクトリを意味します。

find . -name "sample.txt"

この場合、現在いるディレクトリを起点にして、その配下にあるファイルやディレクトリを検索します。

現在地を確認したい場合は、pwdコマンドを使います。

pwd

find . は、Linuxでファイル検索をするときによく使う基本形です。

find /tmp のように検索開始場所を指定する

findコマンドでは、検索を開始する場所を指定できます。

たとえば、/tmp配下からsample.txtを探す場合は、次のように実行します。

find /tmp -name "sample.txt"

この場合、現在どのディレクトリにいても、/tmpディレクトリ配下を検索します。

検索範囲を明確にしたい場合は、絶対パスを指定するとわかりやすいです。

findでファイル名を検索する

findでファイル名を検索するには、-nameを使います。

find . -name "ファイル名"

たとえば、config.txtというファイルを探す場合は、次のように実行します。

find . -name "config.txt"

一致するファイルが見つかると、次のようにパスが表示されます。

./config.txt
./backup/config.txt

findは、見つかったファイルの場所をパスとして表示します。

findで拡張子を指定して検索する

findでは、ワイルドカードを使って拡張子を指定した検索ができます。

たとえば、現在のディレクトリ配下から.logファイルを探す場合は、次のように実行します。

find . -name "*.log"

このコマンドでは、拡張子が.logのファイルやディレクトリ名に一致するものを検索します。

ログファイルを探したい場合によく使います。

ワイルドカードを使う場合は、検索パターンを引用符で囲むのがおすすめです。

find . -name "*.txt"

ワイルドカードを引用符で囲む理由

findで*.logのようなワイルドカードを使う場合は、引用符で囲むのが安全です。

find . -name "*.log"

引用符を付けないと、シェルが先に*.logを展開してしまうことがあります。

find . -name *.log

この書き方でも動く場合はありますが、環境や現在のディレクトリの状態によって意図しない動きになることがあります。

初心者は、findの-nameでワイルドカードを使うときは、必ずダブルクォートで囲むと覚えておきましょう。

findで大文字小文字を無視して検索する

findの-nameは、基本的に大文字と小文字を区別します。

たとえば、Sample.txtとsample.txtは別の名前として扱われます。

大文字小文字を区別せずに検索したい場合は、-inameを使います。

find . -iname "sample.txt"

このコマンドでは、sample.txt、Sample.txt、SAMPLE.TXTなどをまとめて検索できます。

ファイル名の大文字小文字がわからない場合は、-inameが便利です。

findでディレクトリを検索する

findでは、ファイルだけでなくディレクトリも検索できます。

ディレクトリだけを探したい場合は、-type dを使います。

find . -type d -name "logs"

このコマンドでは、現在のディレクトリ配下からlogsという名前のディレクトリを探します。

-type dのdはdirectoryを意味します。

ディレクトリだけを検索したい場合に便利です。

findで通常ファイルだけを検索する

通常ファイルだけを検索したい場合は、-type fを使います。

find . -type f -name "*.log"

このコマンドでは、現在のディレクトリ配下から、通常ファイルであり、名前が.logで終わるものを検索します。

-type fのfはfileを意味します。

ファイルだけを対象にしたい場合は、-type fを付けると意図しないディレクトリの一致を避けやすくなります。

findの-typeでよく使う種類

findの-typeでは、検索対象の種類を指定できます。

指定 意味
-type f 通常ファイル find . -type f
-type d ディレクトリ find . -type d
-type l シンボリックリンク find . -type l

初心者は、まず-type fと-type dを覚えるとよいです。

findでファイルサイズを指定して検索する

findでは、-sizeを使ってファイルサイズを条件に検索できます。

たとえば、10MBより大きいファイルを探す場合は、次のように実行します。

find . -type f -size +10M

+10Mは、10MBより大きいという意味です。

10MBちょうど付近のファイルを探す場合は、次のように指定することもあります。

find . -type f -size 10M

1MBより小さいファイルを探す場合は、次のように実行します。

find . -type f -size -1M

大きいファイルを探してディスク容量を整理したい場合に便利です。

findで更新日時を指定して検索する

findでは、-mtimeを使って更新日時を条件に検索できます。

たとえば、7日より前に更新されたファイルを探す場合は、次のように実行します。

find . -type f -mtime +7

+7は、7日より前という意味です。

過去7日以内に更新されたファイルを探す場合は、次のように実行します。

find . -type f -mtime -7

ちょうど7日前付近に更新されたファイルを探す場合は、次のように指定します。

find . -type f -mtime 7

ログ整理やバックアップ確認で使うことがあります。

findで分単位の更新日時を指定する

分単位で更新日時を指定したい場合は、-mminを使います。

たとえば、60分以内に更新されたファイルを探す場合は、次のように実行します。

find . -type f -mmin -60

60分より前に更新されたファイルを探す場合は、次のように実行します。

find . -type f -mmin +60

サーバー作業中に、直近で更新されたファイルを探したい場合に便利です。

findで空ファイルを検索する

空ファイルを検索したい場合は、-emptyを使います。

find . -type f -empty

このコマンドでは、現在のディレクトリ配下から空の通常ファイルを探します。

空のディレクトリを探したい場合は、-type dと-emptyを組み合わせます。

find . -type d -empty

不要な空ファイルや空ディレクトリを確認したいときに使えます。

findで権限を指定して検索する

findでは、-permを使って権限を条件に検索できます。

たとえば、実行権限があるファイルを探したい場合は、次のように実行します。

find . -type f -perm /111

権限を条件にした検索は、Linuxのパーミッションを理解してから使うとわかりやすいです。

初心者のうちは、まず-name、-type、-mtime、-sizeを覚えれば十分です。

findで検索結果の件数を数える

findの検索結果が何件あるか数えたい場合は、wc -lと組み合わせます。

find . -name "*.log" | wc -l

このコマンドでは、現在のディレクトリ配下にある.logファイルの件数を数えます。

findは検索結果を1行ずつ表示するため、wc -lで行数を数えると件数確認ができます。

前記事のwcコマンドと組み合わせる代表的な使い方です。

findで検索結果から文字列を探す

findで見つけたファイルの中から、さらに文字列を探したい場合はgrepと組み合わせます。

たとえば、.logファイルの中からerrorを探したい場合は、次のように実行できます。

find . -name "*.log" -type f -exec grep "error" {} \;

このコマンドでは、findで見つけた.logファイルに対してgrepを実行します。

{}はfindで見つかったファイルを表します。

\;は-execの終わりを表します。

初心者には少し難しい書き方ですが、findとgrepを組み合わせると、ファイル名検索と中身検索を連携できます。

find -execとは?

find -execは、findで見つけたファイルに対して別のコマンドを実行するための機能です。

基本形は次の通りです。

find 検索条件 -exec コマンド {} \;

{}には、findで見つかったファイル名が入ります。

たとえば、見つかった.logファイルの詳細をls -lで確認する場合は、次のように実行します。

find . -name "*.log" -exec ls -l {} \;

find -execは便利ですが、削除や変更を伴うコマンドと組み合わせる場合は注意が必要です。

findで見つけたファイルを削除する前の注意

findコマンドでは、見つけたファイルを削除する使い方もできます。

ただし、初心者がいきなり削除まで実行するのは危険です。

まずは削除対象を表示して確認しましょう。

find . -name "*.tmp"

表示されたファイルが本当に削除対象で問題ないことを確認します。

確認してから削除を検討します。

findと削除操作を組み合わせると、複数ファイルを一括で削除できてしまいます。

指定条件を間違えると、必要なファイルまで削除する危険があります。

find -deleteを使うときの注意

findには、見つけたファイルを削除する-deleteという機能があります。

find . -name "*.tmp" -delete

このコマンドは、現在のディレクトリ配下から.tmpファイルを検索し、見つかったものを削除します。

非常に便利ですが、条件を間違えると一括でファイルが削除されます。

初心者は、いきなり-deleteを付けず、まず削除対象を表示して確認しましょう。

find . -name "*.tmp"

安全に確認してから、必要な場合だけ-deleteを使います。

findでよく使うオプション一覧

findコマンドで初心者が知っておきたい使い方をまとめると、次の通りです。

コマンド 意味 使う場面
find . -name “sample.txt” sample.txtを検索する ファイル名で探したいとき
find . -iname “sample.txt” 大文字小文字を無視して検索する 名前の表記が不明なとき
find . -name “*.log” .logファイルを検索する 拡張子で探したいとき
find . -type f 通常ファイルを検索する ファイルだけ探したいとき
find . -type d ディレクトリを検索する ディレクトリだけ探したいとき
find . -type f -mtime +7 7日より前に更新されたファイルを探す 古いファイルを確認したいとき
find . -type f -size +10M 10MBより大きいファイルを探す 大きいファイルを探したいとき
find . -type f -empty 空ファイルを探す 空ファイルを確認したいとき
find . -name “*.log” | wc -l 検索結果の件数を数える 該当ファイル数を確認したいとき

初心者は、まずfind . -name、find . -type f、find . -type d、find . -mtime、find . -sizeを覚えるとよいです。

findとgrepの違い

findコマンドとgrepコマンドは、どちらも「探す」ために使うコマンドです。

ただし、探す対象が違います。

findは、ファイル名やディレクトリ名、ファイルの属性を探すコマンドです。

grepは、ファイルの中身から文字列を探すコマンドです。

コマンド 探す対象
find ファイル名・ディレクトリ名・属性 find . -name “*.log”
grep ファイルの中身の文字列 grep “error” sample.log

ファイル名を探したい場合はfindを使います。

ファイルの中にある文字列を探したい場合はgrepを使います。

findとlsの違い

lsコマンドは、ディレクトリの中身を一覧表示するコマンドです。

findコマンドは、指定した場所から条件に一致するファイルやディレクトリを検索するコマンドです。

コマンド 役割 向いている場面
ls 今見ている場所の中身を表示する 現在のディレクトリを確認したいとき
find 条件に一致するものを探す 配下からファイルを検索したいとき

今いる場所の一覧を見るならlsです。

条件を指定して探すならfindです。

findとlocateの違い

locateコマンドは、データベースを使ってファイル名を高速に検索するコマンドです。

findは、指定した場所を実際にたどりながら検索します。

コマンド 特徴
find 現在のファイル状態を条件付きで検索しやすい
locate データベースを使って高速に検索する

locateは高速ですが、環境によってはインストールされていなかったり、データベースが古かったりすることがあります。

初心者は、まず標準的に使いやすいfindコマンドを覚えるとよいです。

findコマンドでよくあるエラー・つまずき

findコマンドを使っていると、エラーやつまずきが発生することがあります。

初心者がよく遭遇するポイントを確認しておきましょう。

No such file or directory

No such file or directoryは、「そのようなファイルやディレクトリはありません」という意味です。

存在しない検索開始場所を指定すると、次のようなエラーが表示されることがあります。

find /notfound -name "*.log"
find: ‘/notfound’: No such file or directory

この場合、/notfoundというディレクトリが存在しません。

まずlsで検索開始場所が存在するか確認しましょう。

ls -ld /notfound

Permission denied

Permission deniedは、「権限がありません」という意味です。

読み取り権限がないディレクトリをfindが調べようとした場合に表示されることがあります。

find / -name "*.log"
find: ‘/root’: Permission denied

これは、現在のユーザーに/rootなどを読む権限がないためです。

システム全体を検索すると、権限エラーが多く表示されることがあります。

初心者は、まず自分のホームディレクトリや作業ディレクトリ内でfindを使うのがおすすめです。

検索結果が表示されない

findを実行しても何も表示されない場合、エラーとは限りません。

条件に一致するファイルやディレクトリが見つからなかった場合、何も表示されないことがあります。

ファイル名の大文字小文字が違う場合もあります。

大文字小文字を無視して探したい場合は、-inameを使いましょう。

find . -iname "sample.txt"

ワイルドカード検索がうまくいかない

findで*.logのようなワイルドカード検索がうまくいかない場合、引用符を付けていないことが原因のことがあります。

安全な書き方は次の通りです。

find . -name "*.log"

ワイルドカードを使うときは、検索パターンをダブルクォートで囲みましょう。

find -deleteで消しすぎてしまう

find -deleteは、条件に一致するファイルを削除できます。

しかし、条件指定を間違えると必要なファイルまで削除してしまう危険があります。

削除前には、必ず-deleteを付けずに対象を確認しましょう。

find . -name "*.tmp"

対象が正しいことを確認してから、必要な場合だけ削除を検討します。

findコマンドで検索できないときの確認ポイント

findコマンドで検索できないときは、次のポイントを確認しましょう。

  • 検索開始場所が存在しているか
  • 現在地をpwdで確認したか
  • ファイル名の大文字小文字を間違えていないか
  • ワイルドカードを引用符で囲んでいるか
  • ファイルだけ探したい場合に-type fを使っているか
  • ディレクトリだけ探したい場合に-type dを使っているか
  • 権限エラーが出ていないか
  • 検索条件を厳しくしすぎていないか

うまく検索できない場合は、まず条件を少なくして試すと原因を探しやすくなります。

find .

その後、少しずつ-nameや-typeなどの条件を追加していきましょう。

findコマンドを安全に使うコツ

findコマンドは、検索だけであれば基本的に安全に使いやすいコマンドです。

ただし、-deleteや-exec rmのように削除を伴う使い方をすると、危険度が上がります。

初心者は、次の流れを習慣にすると安心です。

pwd
find . -name "*.tmp"
find . -name "*.tmp" | wc -l

まずpwdで現在地を確認します。

findで対象を表示します。

wc -lで件数を確認します。

削除する場合でも、最初から削除コマンドを実行せず、必ず対象を表示してから判断しましょう。

findコマンドを使った練習手順

Linux初心者は、練習用ディレクトリでfindコマンドを試すと理解しやすくなります。

次の手順で練習してみましょう。

1. ホームディレクトリへ移動する

cd

2. 練習用ディレクトリを作成する

mkdir -p find-practice/logs find-practice/docs

3. 練習用ディレクトリへ移動する

cd find-practice

4. 練習用ファイルを作成する

touch sample.txt
touch logs/app.log
touch logs/error.log
touch docs/manual.txt

5. すべてのファイルとディレクトリを確認する

find .

6. .logファイルを検索する

find . -name "*.log"

7. 通常ファイルだけを検索する

find . -type f

8. ディレクトリだけを検索する

find . -type d

9. 検索結果の件数を数える

find . -name "*.log" | wc -l

この練習を行うと、findの基本検索、拡張子検索、ファイル検索、ディレクトリ検索、件数確認までまとめて試せます。

findコマンドを覚えると何ができるようになる?

findコマンドを覚えると、Linuxで目的のファイルやディレクトリを効率よく探せるようになります。

具体的には、次のような作業に役立ちます。

  • ファイル名で検索する
  • 拡張子で検索する
  • ディレクトリだけを検索する
  • 通常ファイルだけを検索する
  • 古いファイルを探す
  • 大きいファイルを探す
  • 空ファイルや空ディレクトリを探す
  • 検索結果の件数を数える
  • findとgrepを組み合わせて中身を検索する

LinuxサーバーやVPSを扱う場合、ファイルの場所を探す場面はよくあります。

findコマンドを使えるようになると、ファイル管理やログ調査の効率が大きく上がります。

findコマンドのよくある質問

findコマンドは何に使いますか?

findコマンドは、Linuxでファイルやディレクトリを検索するために使います。

ファイル名、種類、更新日時、サイズなどの条件を指定して検索できます。

findコマンドの基本形は何ですか?

基本形は次の通りです。

find 検索開始場所 条件

たとえば、現在のディレクトリ配下からsample.txtを探す場合は、次のように実行します。

find . -name "sample.txt"

find . の「.」は何ですか?

「.」は現在のディレクトリを表します。

find . と書くと、現在のディレクトリ配下を検索するという意味になります。

findでファイル名を検索するにはどうしますか?

ファイル名で検索するには、-nameを使います。

find . -name "sample.txt"

拡張子で検索する場合は、ワイルドカードを使えます。

find . -name "*.log"

findで大文字小文字を無視して検索できますか?

はい、できます。

大文字小文字を無視したい場合は、-inameを使います。

find . -iname "sample.txt"

findでディレクトリだけ検索するにはどうしますか?

ディレクトリだけ検索したい場合は、-type dを使います。

find . -type d

名前も指定したい場合は、次のように書けます。

find . -type d -name "logs"

findでファイルだけ検索するにはどうしますか?

通常ファイルだけ検索したい場合は、-type fを使います。

find . -type f

.logファイルだけ探す場合は、次のように書けます。

find . -type f -name "*.log"

findで古いファイルを探すにはどうしますか?

更新日時で検索するには、-mtimeを使います。

7日より前に更新されたファイルを探す場合は、次のように実行します。

find . -type f -mtime +7

findで大きいファイルを探すにはどうしますか?

ファイルサイズで検索するには、-sizeを使います。

10MBより大きいファイルを探す場合は、次のように実行します。

find . -type f -size +10M

findとgrepの違いは何ですか?

findは、ファイル名やディレクトリ名、ファイル属性を探すコマンドです。

grepは、ファイルの中身から文字列を探すコマンドです。

ファイル名を探すならfind、中身を探すならgrepと覚えるとわかりやすいです。

findの検索結果の件数を数えるにはどうしますか?

wc -lと組み合わせます。

find . -name "*.log" | wc -l

この例では、.logファイルの検索結果件数を数えられます。

findで見つけたファイルを削除できますか?

できますが、初心者は注意が必要です。

find -deleteを使うと、条件に一致したファイルを削除できます。

find . -name "*.tmp" -delete

ただし、条件を間違えると必要なファイルまで削除する危険があります。

まず-deleteを付けずに対象を確認してから実行しましょう。

findで検索できない原因は何ですか?

検索開始場所が存在しない、ファイル名の大文字小文字が違う、ワイルドカードを引用符で囲んでいない、権限がない、検索条件が厳しすぎる、などが考えられます。

まずはpwdで現在地を確認し、条件を少なくしてfind .から試すと原因を探しやすくなります。

まとめ

findコマンドとは、Linuxでファイルやディレクトリを検索するための基本コマンドです。

基本的な使い方は、findの後ろに検索開始場所と条件を指定します。

find 検索開始場所 条件

現在のディレクトリ配下からsample.txtを探す場合は、次のように実行します。

find . -name "sample.txt"

拡張子が.logのファイルを探す場合は、次のように実行します。

find . -name "*.log"

通常ファイルだけを探したい場合は、-type fを使います。

find . -type f

ディレクトリだけを探したい場合は、-type dを使います。

find . -type d

古いファイルを探す場合は、-mtimeを使います。

find . -type f -mtime +7

大きいファイルを探す場合は、-sizeを使います。

find . -type f -size +10M

findはファイル名や属性を探すコマンドです。

ファイルの中身から文字列を探す場合はgrepを使います。

また、findとwc -lを組み合わせると検索結果の件数を数えられます。

find . -name "*.log" | wc -l

Linux初心者は、まずfind . -name、find . -type f、find . -type d、find . -mtime、find . -sizeを覚え、ファイルやディレクトリを探す操作に慣れていきましょう。

コメント

PVアクセスランキング にほんブログ村

タイトルとURLをコピーしました