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
などを組み合わせることで、目的のファイルを素早く見つけられます。また、-exec
やxargs
を活用すれば、検索結果に対してそのまま操作を行うこともでき、業務効率の向上にもつながります。