Linux入門

findコマンド完全ガイド

Linux入門
記事内に広告が含まれています。

「あのファイルどこに保存したっけ…」「特定の拡張子のファイルを一括で探したい」そんなときに使うのが find コマンドです。Linuxの検索コマンドの中で最も強力で柔軟性が高く、インフラエンジニアの必須ツールです。

findコマンドの基本構文

find の基本構文は find [検索ディレクトリ] [オプション] です。検索ディレクトリを省略するとカレントディレクトリ以下を検索します。

💡 find と grep の違い:findファイル自体を探すコマンドです。ファイルの中身を検索したい場合は grep を使います。

# 基本構文
$ find [検索開始ディレクトリ] [検索条件] [アクション]

# 例:/home以下のすべてのファイルを表示
$ find /home

# 例:カレントディレクトリ以下を検索
$ find .

よく使うオプション一覧

findコマンドオプション早見表
▲ -name, -type, -size, -mtimeの組み合わせで大抵の検索ニーズに対応できる

名前で検索する(-name / -iname)

# 拡張子.logのファイルを検索
$ find /var/log -name "*.log"

# 大文字小文字を無視して検索
$ find . -iname "readme*"

# 特定のファイル名を検索
$ find / -name "nginx.conf" 2>/dev/null
# 2>/dev/null でPermission deniedエラーを非表示

⚠️ ワイルドカードは必ずクォートで囲む
find . -name *.txt はシェルが先に展開してしまい意図しない動作になります。find . -name "*.txt" のように ダブルクォートで囲むのが正しい書き方です。

種類で検索する(-type)

# 通常ファイルのみ
$ find /home -type f

# ディレクトリのみ
$ find /etc -type d

# シンボリックリンクのみ
$ find /usr -type l

サイズで検索する(-size)

# 100MB以上のファイルを検索
$ find / -type f -size +100M 2>/dev/null

# 1KB以下の空に近いファイル
$ find . -type f -size -1k

# ちょうど1MBのファイル
$ find . -size 1M

日時で検索する(-mtime / -atime)

# 7日以内に変更されたファイル
$ find . -mtime -7

# 30日以上前に変更されたファイル(古いログ削除に使う)
$ find /var/log -name "*.log" -mtime +30

# 1時間以内に変更されたファイル
$ find . -mmin -60

見つかったファイルにコマンドを実行する(-exec)

-exec は検索結果に対してコマンドを実行する最も強力な機能です。{} が検索結果のファイル名に置換されます。末尾の \; は「コマンドの終わり」を示す必須の記号です(バックスラッシュはシェルへのエスケープ)。\; の代わりに + を使うと、複数ファイルを一度にまとめて処理するため高速になります。

# 見つかった.tmpファイルをすべて削除
$ find /tmp -name "*.tmp" -exec rm {} \;

# 見つかったファイルの詳細を表示
$ find . -name "*.sh" -exec ls -l {} \;

# 見つかったディレクトリのパーミッションを変更
$ find . -type d -exec chmod 755 {} \;

# -delete オプションで直接削除(-execより高速)
$ find /tmp -name "*.tmp" -delete

条件を組み合わせる

# 30日以上前の.logファイルを削除(実運用でよく使う)
$ find /var/log -name "*.log" -mtime +30 -delete

# 特定ディレクトリを除外して検索
$ find / -name "*.conf" -not -path "*/proc/*" 2>/dev/null

# AND条件(デフォルト)
$ find . -type f -name "*.py" -size +1k

# OR条件(-o)
$ find . -name "*.jpg" -o -name "*.png"

まとめ

  • find [パス] -name "パターン":ファイル名で検索。*でワイルドカード
  • -iname:大文字小文字を無視して検索
  • -type f:ファイル、-type d:ディレクトリに絞り込む
  • -size +100M:サイズ条件。+は以上、-は以下
  • -mtime -7:日時条件。-は7日以内、+は7日より前
  • -exec コマンド {} \;:検索結果にコマンドを実行
  • 2>/dev/null:権限エラーを非表示にする定番パターン

関連記事

📋 Linux入門チートシート完全版で全コマンドを一気に復習できます。

コメント

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