Linuxのfindコマンド徹底解説!基本構文から実践的な使用例まで
新規インストール直後のLinuxには、どれくらいのファイルが含まれているかご存知ですか?Pop!_OSを例に挙げると、なんと31,000個以上のファイルが存在します。これはドキュメントの作成や音楽の保存、PDFのダウンロード、写真の整理などを始める前の話です。

そのため、必要なファイルやフォルダを必要なときに素早く見つけるのは、意外と難しい作業になります。この記事では、Linuxのfindコマンドの使い方を、実用的なコマンド例とともに詳しく解説していきます。
findコマンドの基本構文
構文とは、単語やコマンドの組み合わせ方のことです。普通の文章でも語順を入れ替えると意味不明になるように、コマンドも正しい構文で使わなければ期待通りに動作しません。
find [パス] [条件] [アクション]
各要素の意味は以下の通りです。
- find … Linuxでfindユーティリティを起動する
- path(パス) … 検索を開始する場所
- conditions(条件) … 検索に適用する引数
- actions(アクション) … 検索結果に対して行う処理
3つすべてを使ったシンプルな例がこちらです。
find . -name file-sample.rtf -print
お察しの通り、このコマンドは「file-sample.rtf」という名前のファイルを検索します。
- ピリオド(.)はパスとして、現在のディレクトリとその配下のディレクトリを検索対象にすることをfindに伝えます。
- -name条件は、指定した名前を持つファイルを取得するよう指示します。
- -printアクションは、結果を画面に表示するようfindに指示します。
実は、ピリオドと-printはfindコマンドのデフォルト値なので、省略しても同じ動作になります。つまり、find -name file-sample.rtfだけでも同じ結果が得られます。

別のディレクトリで検索する
現在いるディレクトリとは別の場所を検索することもできます。findの後にディレクトリへのパスを指定するだけです。ルートにいて、ファイルがhome/userディレクトリのどこかにあると分かっている場合は、次のようにします。
find home/user -name file-sample.rtf

この検索も再帰的に行われるため、userディレクトリ以下のすべてのサブディレクトリが検索されます。
複数のディレクトリを同時に検索する
複数のディレクトリを一度に検索したい場合は、コマンド内にスペース区切りで並べて記述するだけです。
find /lib /var /bin -name file-sample.rtf

再帰の範囲を制限する
先ほどのコマンドをルートレベルで実行すると、システム上のすべてのディレクトリが検索対象になります。現在のディレクトリだけに絞りたい場合は、-maxdepthオプションを使用しましょう。-maxdepthの後ろの数字は、findが何階層まで潜って検索するかを指定します。
-maxdepth 1を指定すると、現在のディレクトリのみが対象になります。
find -name file-sample.rtf -maxdepth 1

-maxdepth 2以上の数値を指定すると、その階層数ぶん深くまで検索します。
find -maxdepth 5 -name file-sample.rtf

ワイルドカードを使った検索例
findコマンドでは、アスタリスク(*)がワイルドカードとして機能します。ファイル名のうち確信できない部分に使用でき、1つの名前の中で何度でも使えます。なお、拡張子まで指定しない場合、名前が一致するディレクトリも結果に含まれる点に注意してください。
find home/user -name file*sample*

ファイルタイプで検索する例
ファイルやディレクトリだけを検索したい場合は、-typeオプションと対応する記述子を組み合わせます。主な種類は以下の通りで、特によく使われるのが「f(ファイル)」と「d(ディレクトリ)」です。
- f … ファイル
- d … ディレクトリ
- b … ブロックデバイス
- c … キャラクタデバイス
- l … シンボリックリンク
- s … ソケット
find home/user -name file*sample* -type d

大文字小文字を区別せずに検索する
Windowsと異なり、Linuxは大文字と小文字を厳密に区別します。「File-Sample.rtf」と「file-sample.rtf」の両方を検索したい場合は、-inameオプションを使用します。
find home/user -iname File-Sample.rtf

複数のファイルを一度に検索する例
たとえば、あるファイルの.rtf版と.html版の両方を見つけたい場合、-o(OR)演算子を使えば1つのコマンドで実現できます。ディストリビューションによっては、条件を括弧で囲む必要がある場合もあります。例:( -name file-sample.rtf -o -name file-sample.html )
find home/user -name file-sample.rtf -o -name file-sample.html

特定の名前に一致しないファイルを検索する
.html版の存在は分かっているが、他の形式のファイルもあるかどうか確認したい、といったケースでは、-notオプションを使って.html版を検索結果から除外できます。
find home/user -name file-sample* -not -name *.html

エラー表示を抑えて検索する
再帰検索の例では、アクセス権がなく検索できなかったディレクトリが次々と表示されました。あの「Permission denied」の羅列は煩わしいものです。そこで、別のLinux端末コマンドであるgrepと組み合わせて、これらのメッセージを非表示にしましょう。ちなみに、findとgrepの組み合わせは、特定の単語を含むファイルを探す際にも活用できます。
find -maxdepth 5 -name file-sample.rtf 2>&1 | grep -v “Permission denied”

まず2>&1の部分を分解してみましょう。
- 2 … stderr(標準エラー出力)を表します。
- 1 … stdout(標準出力)を表します。
- > … 左側の出力を右側へリダイレクト(転送)することを意味します。
- & … 出力を結合することを意味します。
つまり2>&1は、「標準エラー出力をリダイレクトし、標準出力とひとまとめにする」という意味になります。
次に| grep -v “Permission denied”の部分を見てみましょう。
- |(パイプ)… 左側のコマンドの実行結果を、右側のコマンドに渡すようLinuxに指示します。ここでは結果がgrepに渡されます。
- grep … テキスト検索ユーティリティです。
- -v … 指定したテキストに一致しないものだけを表示するようgrepに指示します。この場合、「Permission denied」という文字列を含まない行のみが出力されるため、目的の検索結果と、それ以外のエラーメッセージだけが表示されます。
パーミッションで検索する例
この機能を活かすには、Linuxのパーミッションに関する基礎知識が必要です。

下の例では、サンプルファイルはすべてパーミッション664ですが、1つだけ775になっています。-permオプションを使えば、そのファイルを見つけられます。
find Documents/ -name file-sample* -type f -perm 775

ファイルサイズで検索する例
サイズによる検索は、ハードドライブを圧迫している巨大ファイルを特定するのに非常に便利です。-sizeオプションに希望のサイズと、以下のいずれかの接尾辞を組み合わせて使います。接尾辞を省略した場合、デフォルトはbになります。また、あるサイズ「以上」のファイルを検索するには、サイズの前にプラス記号(+)を付けます。
- M … メガバイト
- G … ギガバイト
- k … キロバイト
- b … ブロック(512バイト=デフォルト)
- c … バイト
- w … ワード(2バイトの組)
find -size +500k

所有者で検索する
所有者を基準にファイルを検索する方法は2つあります。1つは所有者のユーザー名、もう1つはユーザーの所属グループです。ユーザー名で検索するには-userオプションの後にユーザー名を、グループで検索するには-groupオプションの後にグループ名を続けて指定します。
find -user username または find -group groupname


最終更新日時で検索する例
過去X日以内に変更・編集されたファイルを検索するには、-mtimeオプションの後に数字を続けます。数字の前にマイナス記号(-)を付けると「今日からその日数以内」に変更されたファイルを、プラス記号(+)を付けると「その日数より前」に変更されたファイルを検索できます。
find -name “file-sample*” -mtime +5(5日より前に更新されたファイル)
find -name “file-sample*” -mtime -5(5日以内に更新されたファイル)

分単位で最終更新日時を指定したい場合は、-mminオプションの後に分数を続けます。+と-の使い方は日数指定の場合と同じです。
find -name “file-sample*” -mmin -5
find -name “file-sample*” -mmin +5

最終アクセス日時で検索する例
ファイルが最後に開かれた日時を基準に検索するオプションは、日数なら-atime、分数なら-aminです。遡りたい日数または分数を続けて指定し、+と-の記号はそれぞれ「より大きい」「より小さい」の意味で使い分けます。
find -name “file-sample*” -atime -5

find -name “file-sample*” -amin -5

findを他のLinuxコマンドと組み合わせる
これまでにgrepとの組み合わせ例を紹介しましたが、findは他の多くのコマンドとも自由に併用できます。findと他のコマンドを組み合わせれば、非常に強力な操作が可能になり、作業時間を大幅に短縮できます。たとえば、特定タイプのファイルを大量に削除しなければならない場面でも、ファイルエクスプローラーで地道に探す代わりに、適切なコマンドを1つ作成すれば数秒で完了します。あなたはfindコマンドをどんな場面で活用しますか?
-
Linuxで覚えておきたい10個のコマンド連結演算子と実用例
Linuxにおける「コマンドの連結(チェーン)」とは、複数のコマンドを1行にまとめ、その間に挟んだ演算子の働きに応じて実行を制御するテクニックです。シェル上で小さなスクリプトを書くのに近い感覚で、ターミナルから直接手軽に実行できます。定型作業の自動化はもちろん、無人で稼働するサーバーをより体系的かつ安定して動作させるうえでも非常に有効です。あわせて読みたい: Awkと正規表現を使ってファイル内のテキストを抽出・フィルタリングする方法本記事では、日常的によく使われるコマンド連結演算子を10個厳選し、簡潔な説明と実際の実行例とともに解説します。これらを使いこなせるようになれば、短くて意味のあるコマ
-
Linuxのwatchコマンドの使い方と実用例をわかりやすく解説
Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行