⌨️シェル・Git

ターミナルでファイルを名前で検索する方法(find)

ターミナルで「あのファイルどこだっけ?」というとき役立つのがfindコマンドです。名前を指定してファイルを探せます。基本の書き方と、よく使うオプションをコピペで使える形で紹介します。

# カレント以下から名前で検索
find . -name '*.txt'

# 大文字小文字を無視して検索
find . -iname 'readme*'
部分意味
find検索コマンド
.(ドット)検索を始める場所(カレント)
-name '*.txt'名前の条件(拡張子txt)

基本の書き方

「どこから・何を」探すかを指定します。

検索場所を指定
findの後に検索を始めるディレクトリを書きます。.(ドット)はカレントディレクトリ以下という意味です。
名前で絞る
-name に続けてファイル名のパターンを書きます。* は任意の文字列を表すワイルドカードです。
コツ:パターンはシングルクォートで囲むのが安全。'*.txt' のように囲まないと、シェルが先に * を展開してしまい、意図通り検索できないことがあります。

よく使うオプション

条件を変えて柔軟に検索できます。

  • -iname…大文字小文字を区別せず検索する。
  • -type f / -type d…ファイルのみ/ディレクトリのみに絞る。
  • -maxdepth…検索する階層の深さを制限する。
注意:findは指定した場所以下を再帰的に検索します。広い範囲(ルートなど)から検索すると時間がかかることも。まずは目的に近いディレクトリを指定すると、速く見つかります。

あわせて読みたい:Gitで直前のコミットを取り消す方法(reset の使い分け)SQLでグループごとの件数を数える方法(GROUP BY)シェル・Gitの記事一覧

まとめ

ファイルの名前検索はfind 検索場所 -name 'パターン'が基本。. はカレント以下、* はワイルドカードです。パターンはシングルクォートで囲むと安全。-inameで大文字小文字を無視、-type fでファイルのみなど、オプションで柔軟に絞り込めます。

よくある質問

findでファイルを名前検索する基本は?
find 検索場所 -name 'パターン' です。例えば find . -name '*.txt' で、カレントディレクトリ以下の拡張子txtのファイルを探せます。
大文字小文字を無視して検索するには?
-name の代わりに -iname を使います。find . -iname 'readme*' のようにすると、ReadmeでもREADMEでも大文字小文字を区別せず検索できます。
パターンをクォートで囲む理由は?
囲まないとシェルが先に * を展開してしまい、意図通り検索できないことがあるためです。'*.txt' のようにシングルクォートで囲むと安全です。
ファイルだけ/フォルダだけ探すには?
-type f でファイルのみ、-type d でディレクトリのみに絞れます。検索が遅いときは -maxdepth で階層の深さを制限すると速くなります。