Linuxのfindコマンドでファイルを自在に検索する方法とは?

Linuxを使っていると、「特定のファイルがどこにあるのかわからない」「拡張子が〇〇のファイルだけを見つけたい」といった場面によく出くわします。そんな時に強力な力を発揮するのが、findコマンドです。
このコマンドを使えば、名前、種類、更新日時、サイズなど、さまざまな条件でファイルを検索できます。この記事では、findコマンドの基本的な使い方から応用テクニックまで、実践的に使える例を交えてわかりやすく解説します。


findコマンドとは?

findコマンドは、指定したディレクトリ内のファイルやディレクトリを、条件を指定して検索するLinuxの標準コマンドです。単に名前で探すだけでなく、「〇日以内に変更されたファイル」「サイズが100MBを超えるファイル」「パーミッションが特定の値であるファイル」など、非常に柔軟な検索が可能です。

構文は以下のようになります:

find [検索開始ディレクトリ] [検索条件] [実行アクション]

例:

find /home/user -name "*.txt"

これは、/home/user以下にある拡張子が.txtのファイルをすべて探します。


ファイル名で検索する方法(-nameオプション)

最もよく使われるのが-nameオプションです。ファイル名を指定して検索します。ワイルドカード(*?)も利用可能です。

例1:拡張子が.logのファイルを探す

find . -name "*.log"

カレントディレクトリ以下の.logファイルをすべて表示します。

例2:大文字小文字を無視して探す

find . -iname "*.JPG"

-inameを使うことで、大文字と小文字を区別せずに検索できます。


ファイルの種類を指定して検索(-typeオプション)

-typeオプションを使えば、ファイルの種類(通常ファイル、ディレクトリ、シンボリックリンクなど)を指定できます。

  • f:通常ファイル
  • d:ディレクトリ
  • l:シンボリックリンク

例1:ディレクトリだけを検索

find /var -type d

例2:通常ファイルのみ検索

find /etc -type f

更新時間で検索する(-mtime、-atime、-ctime)

ファイルの更新日やアクセス日時で検索できます。

  • -mtime:最終更新からの経過日数
  • -atime:最終アクセスからの経過日数
  • -ctime:状態変更(パーミッションなど)からの経過日数

例1:3日以内に変更されたファイル

find . -mtime -3

例2:10日前に変更されたファイル

find . -mtime 10

例3:30日以上アクセスされていないファイル

find . -atime +30

サイズで検索する(-sizeオプション)

ファイルサイズを条件に検索できます。単位は以下の通りです:

  • c:バイト(bytes)
  • k:キロバイト(KB)
  • M:メガバイト(MB)
  • G:ギガバイト(GB)

例1:100MB以上のファイルを探す

find . -size +100M

例2:1KBちょうどのファイル

find . -size 1k

パーミッションで検索(-permオプション)

ファイルのパーミッション(権限)に基づいて検索することも可能です。

例1:パーミッションが777のファイル

find . -perm 0777

例2:少なくとも所有者が実行権限を持つファイル

find . -perm -u=x

複数条件の組み合わせ(-and, -or, !)

findコマンドでは論理演算子を使って、条件を組み合わせることもできます。

例1:.txtファイルでサイズが1MB超のもの

find . -name "*.txt" -a -size +1M

例2:.logファイル以外を探す

find . ! -name "*.log"

例3:.jpgまたは.pngファイルを探す

find . \( -name "*.jpg" -o -name "*.png" \)

※ 丸括弧はシェルの特殊文字なので、バックスラッシュでエスケープが必要です。


見つかったファイルに対してアクションを実行する(-exec)

findは検索するだけでなく、見つかったファイルに対してコマンドを実行することも可能です。よく使うのが-execオプションです。

例1:検索したファイルを削除

find . -name "*.tmp" -exec rm {} \;

{}は検索結果のファイル名を表し、\;-execの終了を表します。

例2:ファイルの詳細を表示(ls)

find . -type f -exec ls -lh {} \;

xargsとの組み合わせで効率アップ

大量のファイルを扱う場合、-execよりもxargsとの組み合わせが高速になることがあります。

例:ファイル一覧を削除

find . -name "*.bak" | xargs rm

※ ファイル名にスペースが含まれる場合はうまく動作しないことがあるので注意。


検索除外のテクニック(-prune)

一部のディレクトリを検索対象から除外したい場合には-pruneを使います。

例:.gitディレクトリを除外して検索

find . -path "./.git" -prune -o -name "*.py" -print

まとめ

Linuxのfindコマンドは、ファイルやディレクトリをさまざまな条件で柔軟に検索できる非常に強力なツールです。基本的な-nameから、-type-mtime-size-permなどを組み合わせることで、目的のファイルを素早く見つけられます。また、-execxargsを活用すれば、検索結果に対してそのまま操作を行うこともでき、業務効率の向上にもつながります。

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