確認のみファイル・文字の検索

find:拡張子でファイルを探したい

このページでできること

find で現在地と配下のフォルダを検索し、名前が .txt で終わる通常ファイルを表示します。

コマンド例

find . -type f -name '*.txt'

ツリー図で見る操作対象

理解のための模式図です。実際の端末画面ではありません。末尾の / はフォルダ、[現在地] はコマンドを実行する場所です。枝線は親子関係を表します。

対象のフォルダ構造(実行前後で変更なし)
work/ [現在地]
├── archive/
│   └── memo.txt
├── images/
│   └── photo.png
├── memo.txt
└── notes.txt

work/ 以下をたどり、名前が .txt で終わる通常ファイルを探します。photo.png は対象外です。'*.txt' の引用符を残して、find に検索条件を渡します。

この構造での検索結果

./archive/memo.txt
./memo.txt
./notes.txt

結果の表示順は環境によって異なる場合があります。

直下の .txt だけを探す

find . -maxdepth 1 -type f -name '*.txt'

上のツリー図と同じ work/ で実行します。-maxdepth 1 を検索開始場所 . の後に加えると、サブフォルダの中には進みません。

検索開始場所から数えた深さ
work/                  深さ0・現在地
├── memo.txt           深さ1・対象
├── notes.txt          深さ1・対象
├── archive/           深さ1・フォルダ
│   └── memo.txt       深さ2・今回は対象外
└── images/            深さ1・フォルダ
    └── photo.png      深さ2・今回は対象外

結果:同じ入力でも、3件から2件になる

ページ先頭の通常の検索では ./archive/memo.txt も含む3件です。直下だけに限定すると、表示されるのは次の2件です。表示順は保証されません。

./memo.txt
./notes.txt

-type f があるため、深さ1でもフォルダ自体は表示しません。深さは検索を始めた場所を0として数えます。-maxdepth 0 では開始場所だけを調べるので、この例では通常ファイルに該当せず何も表示されません。

サブフォルダの中にしか .txt がない場合、直下検索が正常終了しても結果は0件です。「Permission denied」などのエラーが出た場合は、0件と決めつけずメッセージを確認してください。これらの検索例はファイルを変更しません。

この例はGNU find向けです。macOSなどの別のfind実装では、対応するオプションをその環境のマニュアルで確認してください。フォルダ名を探す場合はフォルダだけを検索する例へ。

GNU公式:検索する深さの設定を確認する(英語)

検索条件を分けて読む

find の指定と意味
部分意味
find指定した場所から、下の階層も順に調べるコマンドです。
.検索を始める場所。ここではターミナルの現在地です。
-type f通常ファイルだけを対象にします。フォルダは結果に含めません。
-name '*.txt'名前が .txt で終わるものを選びます。* は0文字以上の任意の文字列です。

-name は大文字と小文字を区別します。フォルダの中身の文章ではなく、名前を調べます。引用符は、* などをターミナル側で先に展開せず find に渡すために必要です。空白を含む名前も引用符で囲みます。

大文字・小文字を区別せずに探す

find . -type f -iname '*.txt'

-name を -iname に変えます。memo.txt に加え、REPORT.TXT のように拡張子が大文字のファイルも対象になります。上のツリー図にないファイルは自動で作られません。

何も表示されないとき

条件に合うものがなければ何も表示されず、入力待ちに戻ります。検索開始場所、名前のつづり、大文字・小文字、ファイルとフォルダの違いを確認しましょう。エラーメッセージが出た場合は、検索が正常に完了したとは限りません。

名前でなくファイル内の文章を探す場合は、grep で文字を含む行を探す方法を参照してください。

使い方を順番に確認する練習を始めるときは、この手順に沿って進めます

使い方

  1. Linuxのターミナルを開き、pwd と ls で現在地・対象を確認します。
  2. 例に出てくるファイル名・フォルダ名を、自分の環境に合わせます。読み取り・検索・コピー・移動の対象は、実際に存在するものを指定してください。
  3. 下の注意点を読んだうえでコマンドを入力し、Enterで実行します。

実行するとどうなる?

find で現在地と配下のフォルダを検索し、名前が .txt で終わる通常ファイルを表示します。 このコマンド例はファイルの内容を変更しません。

注意点

'*.txt' の引用符は外さないでください。シェルによる先行展開を防ぎます。

権限に関する注意:アクセス拒否の原因を調べずに、管理者権限や sudo で実行しないでください。

うまくいかないときに確認するエラーや想定と違う結果が出たときの確認ポイント

うまくいかないとき

「No such file or directory」が出たら、現在地・名前・大文字と小文字を確認します。「Permission denied」が出たら、自分が操作してよい場所か確認してください。原因を調べずに sudo を付けないでください。

対象環境:GNU/Linux・Bash。環境やバージョンによって表示が異なる場合があります。

公式マニュアルで詳しく確認する(英語)

同じカテゴリのコマンド

コマンド一覧に戻る