## はじめに
`find` コマンドはLinuxでファイルやディレクトリを条件指定して検索するコマンドです。ファイル名・拡張子・更新日時・サイズ・パーミッションなど多様な条件を組み合わせて絞り込みができ、サーバー管理において不可欠なツールです。
単純なファイル名検索から、特定期間に更新されたファイルの一括操作まで、`find` の使い方をマスターすることでサーバー運用の効率が大幅に向上します。本記事では基本から実践的な活用方法まで体系的に解説します。
## 症状・背景
`find` コマンドが必要になる主な場面:
– 特定のファイル名やパターンに一致するファイルを探したい
– 古いログや一定期間アクセスのないファイルを見つけて削除したい
– 特定の拡張子のファイルを一括で処理したい
– パーミッションが間違っているファイルを検索したい
– 大容量ファイルを探してディスク空きを確保したい
## 手順・設定方法
### ステップ1: 基本的なファイル検索
“`bash
# ファイル名で検索
find . -name “config.conf”
# 大文字小文字を区別しない検索(-iname)
find . -iname “*.log”
# ルートから全体を検索
find / -name “nginx.conf” 2>/dev/null
# ディレクトリのみ検索(-type d)
find /var -type d -name “cache”
# ファイルのみ検索(-type f)
find /etc -type f -name “*.conf”
“`
### ステップ2: 日時・サイズでの検索
“`bash
# 7日以内に更新されたファイル(-mtime)
find /var/log -mtime -7 -type f
# 30日以上前に更新されたファイル
find /var/log -mtime +30 -type f
# 1時間以内に変更されたファイル(-mmin)
find /tmp -mmin -60 -type f
# 100MB以上のファイルを検索(-size)
find / -size +100M -type f 2>/dev/null
# 空のファイルを検索
find /tmp -size 0 -type f
# 空のディレクトリを検索
find /var -empty -type d
“`
### ステップ3: 検索結果への操作(-exec / xargs)
“`bash
# 見つかったファイルを詳細表示(-exec ls)
find /etc -name “*.conf” -exec ls -la {} \;
# 30日以上前のログを削除
find /var/log -name “*.log” -mtime +30 -exec rm {} \;
# 見つかったファイルをアーカイブに移動
find /tmp -mtime +7 -type f -exec mv {} /tmp/archive/ \;
# xargsと組み合わせて高速処理(大量ファイルに有効)
find /var/log -name “*.log” -mtime +30 | xargs rm -f
# ファイル内容をgrepで検索(findとgrepの組み合わせ)
find /etc -name “*.conf” | xargs grep -l “ServerName”
# パーミッション777のファイルを検索・修正
find /var/www -perm 777 -type f | xargs chmod 644
“`
### ステップ4: 高度な検索条件の組み合わせ
“`bash
# 複数条件のAND(-a): 7日以上前かつつ【0MB以上
find /var/log -mtime +7 -size +10M -type f
# 複数条件のOR(-o): .logまたは.tmp
find /tmp \( -name “*.log” -o -name “*.tmp” \) -type f
# 条件のNOT(!または-not): .confを除く
find /etc -not -name “*.conf” -type f
# 特定ディレクトリを除外(-prune)
find / -path /proc -prune -o -name “*.conf” -print 2>/dev/null
# 深さを制限(-maxdepth)
find /etc -maxdepth 2 -name “*.conf”
# 所有者で検索(-user)
find /home -user apache -type f
# パーミッションで検索(-perm)
find /etc -perm -o+w -type f # 他ユーザーが書き込み可能なファイル
“`
## 注意事項
– `find /` の全体検索は `/proc` や `/sys` を巻き込んで遅くなるため、`2>/dev/null` でエラーを抑制するか `-path /proc -prune` で除外する
– `-exec rm {} \;` のような削除操作は、事前に `-exec echo {} \;` で対象ファイルを確認してから実行する
– `xargs` を使う場合、ファイル名にスペースが含まれると誤動作する。`find -print0 | xargs -0` で対処する
– `find` は検索開始ディレクトリのパーミッションに依存するため、`root` 権限なしでシステム全体を検索する場合は一部スキップされる
## まとめ
1. **基本検索**: `find /path -name “pattern”` でファイル名・拡張子検索
2. **日時検索**: `find -mtime -7` で7日以内の更新ファイルを検索
3. **サイズ検索**: `find -size +100M` で大容量ファイルを検索
4. **一括操作**: `find … -exec command {} \;` で検索結果に処理を適用
5. **複合条件**: `-a`(AND)、`-o`(OR)、`!`(NOT)で複雑な絞り込み
関連記事:
– [rmコマンドでファイル・ディレクトリを削除する方法](../0704-linux-rm-command/)
– [lsコマンドでファイルを一覧表示する方法](../0701-linux-ls-command/)
– [grepコマンドでファイルの内容を検索する方法](../0706-linux-grep-command/)



