🔎

【Linux】find コマンド徹底活用術

に公開2

はじめに

実務でよく使う「権限変更」「所有者変更」「除外検索」などのテクニックを、find コマンドでの具体例を交えて紹介します。


一括変更

ディレクトリ・ファイルの権限を一括変更する

目的
/Apl/hogehoge/app 配下のすべてのディレクトリとファイルのパーミッションを 775 に変更する。

find /Apl/hogehoge/app -type d -exec chmod 775 {} \;
find /Apl/hogehoge/app -type f -exec chmod 775 {} \;

解説

  • -type d :ディレクトリのみ対象
  • -type f :ファイルのみ対象
  • -exec :処理を指示
  • chmod 775 :権限変更
  • {} :find で見つかったファイル名に置き換えられる
  • \; :-exec の終了を示す

所有者とグループを一括変更する

目的
所有者が root になっているファイル・ディレクトリを、hogeapl:hogegrp に変更する。

find /Apl/hogehoge/app -type d -exec chown hogeapl:hogegrp {} \;
find /Apl/hogehoge/app -type f -exec chown hogeapl:hogegrp {} \;

解説

  • -type d :ディレクトリのみ対象
  • -type f :ファイルのみ対象
  • -exec :処理を指示
  • chown user:group :所有者とグループを変更
  • {} :find で見つかったファイル名に置き換えられる
  • \; :-exec の終了を示す

-exec と xargs の違い

比較項目 -exec xargs
実行方法 1件ずつ処理 まとめて処理
処理速度 遅め 高速
空白対応 安全 要注意(-print0 + -0 で対応)
複雑な処理 得意 単純な処理向き

xargs を使った例

find /Apl/hogehoge/app -type f | xargs chown hogeapl:hogegrp

表示

マッチするディレクトリだけ表示したい場合

よく業務で使用していたものとして記述しようと思います。

例1:/hoge 配下から sample という名前を含むディレクトリを検索したい

find /hoge -type d -name '*sample*'

解説

  • /hoge :検索対象のルートディレクトリ
  • -type d :ディレクトリのみ対象
  • -name '*sample*' :名前に sample を含むものを検索(前後に何か文字があってもOK)

実行結果例

/hoge/test/sample
/hoge/sample_data
/hoge/logs/sample_backup


例2:/hoge 配下から sample を含むファイルを検索したい

find /hoge -type f -name '*sample*'

解説

  • -type f :ファイルのみ対象
  • -name '*sample*' :ファイル名に sample を含むものを検索

実行結果例

/hoge/sample.txt
/hoge/logs/sample.log
/hoge/data/sample_backup.csv


応用編:検索結果の詳細情報を表示したい

find /hoge -type f -name '*sample*' | xargs ls -l

またはディレクトリの場合:

find /hoge -type d -name '*sample*' | xargs ls -ld

複数の名前にマッチさせたい場合

find /hoge -type f | grep -E 'sample|test|backup' | xargs ls -l

まとめ

目的 コマンド例
sampleを含むディレクトリを探す find /hoge -type d -name 'sample'
sampleを含むファイルを探す find /hoge -type f -name 'sample'
複数パターンにマッチ find /hoge -type f

日時での表示

更新日時で絞り込む基本構文

find /hoge -type f -mtime -3

意味

  • /hoge :検索対象のディレクトリ
  • -type f:ファイルのみ対象
  • -mtime -3 :3日以内に更新されたファイル

使用例

例1:過去3日以内に更新されたファイルを探す

find /hoge -type f -mtime -3


例2:ちょうど3日前に更新されたファイルを探す

find /hoge -type f -mtime 3


例3:3日より前に更新されたファイルを探す(3日以上前)

find /hoge -type f -mtime +3


応用:更新日時で絞り込んで詳細表示

find /hoge -type f -mtime -3 | xargs ls -l


より細かい時間指定をしたい場合

-mmin オプションを使うと「分単位」で絞り込めます。

例:過去60分以内に更新されたファイル

find /hoge -type f -mmin -60


まとめ

条件 オプション例 説明
3日以内に更新 -mtime -3 過去3日以内
ちょうど3日前 -mtime 3 3日前に更新
3日より前 -mtime +3 3日以上前
60分以内 -mmin -60 過去1時間以内

日時の組み合わせ

ファイルの「アクセス日時」「変更日時」「作成日時」で絞り込む方法

Linuxの find コマンドでは、以下のようなオプションを使って絞り込みが可能です:

タイプ オプション 説明
アクセス日時 -atime / -amin 最後にアクセスされた日時(読み込みなど)
変更日時 -mtime / -mmin 内容が変更された日時(chmod や echo など)
作成日時 ❌ 標準の find では取得不可 Linuxでは「作成日時」は通常保持されない(ext4などの制限)


アクセス日時で絞り込む

例:過去1日以内にアクセスされたファイル

find /hoge -type f -atime -1


例:過去30分以内にアクセスされたファイル

find /hoge -type f -amin -30


作成日時で絞り込む(※注意点あり)

Linuxの多くのファイルシステム(例:ext4)では、作成日時(birth time) を標準では保持していません。
そのため、find コマンドでは直接絞り込むことができません。

対応方法(代替案)

  1. stat コマンドで確認(一部の環境で可能):
stat /hoge/sample.txt

出力例(環境によって異なる)

Access: 2025-07-04 14:00:00
Modify: 2025-07-03 10:00:00
Change: 2025-07-03 10:05:00
Birth: 2025-07-01 09:00:00  ← 作成日時(表示される場合もある)
  1. debugfs を使って ext4 の inode 情報から取得(高度な方法)


応用:アクセス日時で絞り込んで詳細表示

find /hoge -type f -atime -1 | xargs ls -l


まとめ

条件 オプション例 説明
アクセス日時(1日以内) -atime -1 最後に読み込まれたのが1日以内
アクセス日時(30分以内) -amin -30 最後に読み込まれたのが30分以内
作成日時 ❌ 標準の find では取得不可 stat や debugfs で確認可能(環境依存)

更新日時とアクセス日時を組み合わせる方法

例:更新日時が3日以内 かつ アクセス日時が1日以内のファイルを探す

find /hoge -type f -mtime -3 -atime -1

解説

  • -mtime -3 :3日以内に更新されたファイル
  • -atime -1 :1日以内にアクセスされたファイル
  • 両方の条件を満たすファイルのみが対象になる(AND条件)


応用:詳細情報を表示

find /hoge -type f -mtime -3 -atime -1 | xargs ls -l


OR 条件で検索したい場合(どちらか一方でもOK)

find 単体では OR 条件は少し複雑になりますが、以下のように -o(OR)と括弧を使って実現できます:

find /hoge -type f \\( -mtime -3 -o -atime -1 \\)

\\(\\) はシェルで括弧をエスケープするために必要


まとめ

条件 コマンド例
更新3日以内 AND アクセス1日以内 find /hoge -type f -mtime -3 -atime -1
更新3日以内 OR アクセス1日以内 find /hoge -type f \( -mtime -3 -o -atime -1 \)

よく使う便利な findコマンド集

前提 :下記に記述する/path/to/searchは、検索対象のディレクトリに読み替えて使用してください。

1. 特定の拡張子のファイルを探す

find /path/to/search -type f -name '*.log'
  • .log ファイルだけを検索
  • バックアップやログ整理に便利


2. 空のファイルやディレクトリを探す

find /path/to/search -type f -empty
find /path/to/search -type d -empty
  • 空のファイルやディレクトリを削除したいときに便利


3. サイズで絞り込む

find /path/to/search -type f -size +100M
  • 100MB以上のファイルを検索
  • ディスク容量の調査や整理に役立つ


4. 特定のユーザーが所有するファイルを探す

find /path/to/search -type f -user username
  • 所有者が username のファイルを検索
  • 権限管理や監査に便利


5. 一定期間内に作成されたファイルを探す(ctime)

find /path/to/search -type f -ctime -7
  • 7日以内に「inode情報が変更された」ファイル(作成・削除・権限変更など)


6. 検索結果を削除する(慎重に!)

find /path/to/search -type f -name '*.tmp' -delete
  • .tmp ファイルを一括削除
  • -delete は強力なので、事前に -print で確認推奨

-print で確認する例:

find /path/to/search -type f -name '*.tmp' -print

解説

  • -type f :ファイルのみ対象
  • -name '*.tmp' :.tmp という拡張子のファイルを対象
  • -print :検索結果(ファイルパス)を表示するだけで、削除はしない

応用:削除前に詳細情報を確認したい場合

find /path/to/search -type f -name '*.tmp' | xargs ls -l


7. 検索結果を tar でまとめる

find /path/to/search -type f -name '*.log' | tar -czf logs.tar.gz -T -
  • 検索結果を圧縮して保存
  • ログ収集やバックアップに便利


8. 複数条件で検索(AND/OR)

find /path/to/search -type f -name '*.log' -size +10M
  • .log かつ 10MB以上のファイル
find /path/to/search \\( -name '*.log' -o -name '*.txt' \\)
  • .log または .txt ファイル


まとめ

find は以下のような場面で特に便利です:

  • ファイル整理(サイズ・拡張子・空ファイル)
  • 権限・所有者の確認
  • 更新・アクセス・作成日時の絞り込み
  • 条件付き削除や圧縮


最後に

長くなってしまいましたが、ここまで見ていただきありがとうございました。
このfind コマンドのまとめが、何かしらの助けになればまとめた甲斐があります!


find コマンド、奥が深すぎる...

Discussion

Akihiro MATOBAAkihiro MATOBA

参考までに、私がよく使うオプション -prune を紹介します:
find . -name .git -type d -prune -o -name "*.log"
のように、「.gitディレクトリを除いて」検索できます。
「現在のディレクトリから下へ、名前が .git なディレクトリは、それ以上深入りせず、脇に置いて、名前が *.log のものを 表示せよ」と読みます。