概要
Linux環境において目的のファイルを素早く検索して処理することは、サーバー管理や開発における基本であり必須のスキルです。本記事では、findコマンドの基本的な検索オプションから、ファイルサイズ・更新時間に基づく検索、さらには検索結果に対する一括処理(-exec)まで、実践を通じて段階的に解説します。
実習環境の構築とファイル名ベースの基本検索
find コマンドの実習用ディレクトリを作成し、その場所へ移動するために mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab コマンドを実行します。

検索テストに使用する様々な拡張子のサンプルファイルを生成するために、touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak コマンドを実行します。

find コマンドは、指定したディレクトリパス配下のすべてのファイルとディレクトリを条件に応じて再帰的に検索します。find . -name "*.log" コマンドを実行すると、カレントディレクトリ(.)を基準に拡張子が .log で終わるすべてのファイルを検索し、パスと共に出力します。
この際、ワイルドカード文字(*)がシェルによって先に展開されるのを防ぐため、検索パターンはダブルクォーテーションで囲んで指定します。
⚙️ [主要オプション]
-name : 大文字・小文字を区別して、指定したファイル名またはパターンに一致する項目を検索します。-iname : 大文字・小文字を区別せずに、ファイル名またはパターンに一致する項目を検索します。-type : 検索するファイルタイプ(f は通常ファイル、d はディレクトリ)を指定します。-size : ファイルサイズを基準に検索します(+ は超過、- は未満)。-mtime : ファイル内容が変更された基準時間(日数単位)を条件に検索します。-empty : 内容が空のファイルや空ディレクトリを検索します。-exec : 検索された各ファイルに対して、指定したLinuxコマンドを一括実行します。-delete : 検索条件に一致するファイルを即座に削除します。

大文字・小文字を区別せずにファイル名を検索するため、-iname オプションを使用して find . -iname "GUIDE.TXT" コマンドを実行します。
実際のファイル名が小文字の guide.txt であっても、大文字の検索条件と一致してファイルパスが正常に検索されます。

ファイルタイプとサイズ条件による大容量ファイルの探索
ファイルサイズ条件での検索をテストするために、15MBの容量を持つ大容量サンプルファイルを生成する truncate -s 15M ~/find_lab/backup/large_archive.iso コマンドを実行します。

さらなるサイズ比較の実習のため、2MB容量のログサンプルファイルを生成する truncate -s 2M ~/find_lab/logs/big_trace.log コマンドを実行します。

通常ファイルは除外してディレクトリパスのみをフィルタリングして検索するため、-type d オプションを適用した find ~/find_lab -type d コマンドを実行します。
指定したパス配下に存在するすべてのディレクトリ一覧のみが分かりやすく出力されます。

通常ファイル(-type f)のうち10MBを超える大容量ファイル(-size +10M)を検索し、詳細情報を併せて確認するために find ~/find_lab -type f -size +10M -exec ls -lh {} + コマンドを実行します。
条件に一致する15MBサイズの large_archive.iso ファイルが検索され、詳細なパーミッションおよび容量情報と共に出力されます。

時間条件(mtime/mmin)に基づく変更ファイルの検索
時間の経過に伴うファイル検索の実習を行うため、2日前に更新された過去のサンプルファイルを生成する touch -d "2 days ago" ~/find_lab/backup/old_backup.tar コマンドを実行します。

直近に変更された最新ファイルの検索テストを行うため、現時点のタイムスタンプを持つサンプルファイルを生成する touch ~/find_lab/logs/recent.log コマンドを実行します。

直近24時間以内に更新された通常ファイルを検索するため、-mtime -1 オプションを適用した find ~/find_lab -type f -mtime -1 コマンドを実行します。
基準時間(24時間)以内に作成または変更されたすべてのファイル一覧が正常に出力されます。

更新されてから24時間(1日)を超えた古いファイルを検索するため、-mtime +1 オプションを適用した find ~/find_lab -type f -mtime +1 コマンドを実行します。
2日前の日付で作成しておいた old_backup.tar ファイルのみが正確にフィルタリングされて出力されます。

検索結果の一括制御: -exec オプションと削除処理
一括制御およびパーミッション変更の実習を進めるため、一時ディレクトリを作成してサンプルのテンポラリファイルを生成する mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp コマンドを実行します。

検索されたすべての .tmp 拡張子ファイルのアクセス権限を644へ一括変更するため、-exec オプションを適用した find ~/find_lab/temp -name "*.tmp" -exec chmod 644 {} \; コマンドを実行します。{} 記号は検索された個々のファイルパスに置換され、\; は -exec 句へ渡されるコマンドの終了を指定します。

パーミッション変更作業が正常に反映されたか確認するため、ls -l ~/find_lab/temp コマンドを実行します。
出力結果から、2つの一時ファイルがいずれも読み取りおよび書き込み権限(-rw-r--r--、644)に変更されていることを確認できます。

検索条件に一致する .tmp ファイルを一括削除するため、rm -f コマンドを連携させた find ~/find_lab/temp -name "*.tmp" -exec rm -f {} \; コマンドを実行します。
個別の確認プロセスなしで、検索対象となったファイルが一度に削除されます。

一時ファイルがすべて正常に削除されたかを最終確認するため、ls -la ~/find_lab/temp コマンドを実行します。
カレントディレクトリ(.)と親ディレクトリ(..)のみが残り、作成した一時ファイルがすべてきれいに削除された状態が確認できます。

ここまで、Linuxのfindコマンドにおける重要検索オプションから、実務で即座に役立つ一括処理テクニックまでを解説しました。
紹介したオプションを用途に合わせて組み合わせながら、ファイル検索や管理作業をより一層効率的に進めてみてください。