【Linux】find コマンド徹底活用術
はじめに
実務でよく使う「権限変更」「所有者変更」「除外検索」などのテクニックを、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 コマンドでは直接絞り込むことができません。
対応方法(代替案):
- 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 ← 作成日時(表示される場合もある)
- 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
参考までに、私がよく使うオプション -prune を紹介します:
find . -name .git -type d -prune -o -name "*.log"
のように、「.gitディレクトリを除いて」検索できます。
「現在のディレクトリから下へ、名前が .git なディレクトリは、それ以上深入りせず、脇に置いて、名前が *.log のものを 表示せよ」と読みます。
コメントありがとうございます!
そのようなコメントが有るのですね。勉強になります…
自分でもネットで探してみましたが、explainshell.comというページに掲載されておりました。