「サーバーの容量を圧迫している古いログファイルを一気に検索して削除したい」
Linuxを操作していると、ファイルやディレクトリを条件に合わせて探し出す場面が必ずやってきます。
この記事では、Linux環境でファイル検索の要となる
find コマンド の実践的な使い方を解説します。単なるファイル名での検索だけでなく、「1ヶ月以上前のファイルを探す」「1GB以上の巨大ファイルを探す」といった現場で必須のオプションや、検索したファイルをそのまま一括削除する
-exec の使い方まで網羅しました。1. findコマンドの基本構文
find コマンドは、「どこから(検索パス)」「どんな条件で(オプション)」探すかを指定して実行します。# 基本書式: find [検索するディレクトリ] [検索条件]
.(ドット)にすると「現在のディレクトリ以下すべて」、/ にすると「システム全体」を検索対象にします。2. ファイル名・ディレクトリ名で検索する(-name)
最も基本となるのが、ファイルの名前で探す-name オプションです。ワイルドカード(*)を使って「特定の拡張子だけ」を探すことも可能です。完全一致で探す
# /var/www ディレクトリ以下から "index.html" を探す # find /var/www/ -name "index.html"
ワイルドカード(*)で拡張子を指定して探す
# 現在のディレクトリ以下から ".log" で終わるファイルをすべて探す # find . -name "*.log"
")で囲むのが鉄則です。大文字・小文字を区別せずに探す(-iname)
# "readme.txt" や "README.TXT" を区別せずに探す # find . -iname "readme.txt"
3. 種類(ファイルかディレクトリか)で絞り込む(-type)
名前が同じでも、「ディレクトリだけを探したい」「ファイルだけを探したい」という場合は-type オプションを追加します。・
-type f :ファイルのみ・
-type d :ディレクトリのみ# /etc 以下の "backup" という名前の「ディレクトリ」だけを探す # find /etc/ -name "backup" -type d
4. 更新日時で検索する(-mtime)
「最近変更されたファイルが知りたい」「古いログファイルをあぶり出したい」といった場面で活躍するのが、更新日時(modify time)で絞り込む-mtime オプションです。日数を指定します。# ちょうど3日前に更新されたファイルを探す # find /var/log/ -mtime 3 # 3日「以内」に更新されたファイルを探す(マイナスをつける) # find /var/log/ -mtime -3 # 30日「より前(古い)」ファイルを探す(プラスをつける) # find /var/log/ -mtime +30
基準ファイルより新しいファイルを探す(-newer)
「このファイルが置かれた後に更新されたファイルをすべて出したい」という場合は-newer オプションが便利です。デプロイ作業後に変更されたファイルの洗い出しなど、現場でよく使います。# deploy.log より新しいファイルを現在のディレクトリ以下から探す # find . -newer deploy.log
5. ファイルサイズで検索する(-size)
ディスク容量が逼迫した際、巨大なファイルを特定するのに使います。# サイズが 100MB 以上のファイルを探す # find / -size +100M # サイズが 0(空)のファイルを探す # find . -size 0 -type f
M(メガバイト)、G(ギガバイト)、k(キロバイト。小文字なので注意)などが使えます。6. 【現場の必須テクニック】検索したファイルを一括処理する(-exec)
find コマンドの真骨頂は、見つけたファイルに対してそのまま別のコマンド(削除や権限変更など)を実行できる点にあります。たとえば、「30日以上前の古いログファイルを一括で削除したい」場合は以下のように書きます。
# 30日以上前の .log ファイルを検索し、そのまま削除(rm)する # find /var/log/ -name "*.log" -mtime +30 -exec rm -f {} \;
-exec:後ろに続くコマンドを実行する・
{}:findで見つかったファイルパスがここに入る・
\;:execコマンドの終わりを示すおまじない(必須)※削除(rm)を一括実行する前は、必ず一度
-exec を外して実行し、本当に消してよいファイルだけがリストアップされているか確認するのが絶対のルールです。本記事のまとめ
| やりたいこと | コマンド・オプション |
|---|---|
| ファイル名で検索する | find パス -name "ファイル名" |
| 拡張子で検索する | find パス -name "*.拡張子" |
| 大文字小文字を区別せず検索する | find パス -iname "ファイル名" |
| ファイルのみに絞り込む | find パス -type f |
| ディレクトリのみに絞り込む | find パス -type d |
| N日以内に更新されたファイル | find パス -mtime -N |
| N日より古いファイル | find パス -mtime +N |
| 基準ファイルより新しいファイルを探す | find パス -newer 基準ファイル名 |
| Nメガバイト以上のファイル | find パス -size +NM |
| 見つけたファイルを一括で削除する | find パス -name "*.log" -mtime +30 -exec rm -f {} \; |
コマンドの打ち間違いで、システムを壊してしまったことはありませんか?
findコマンドと一括削除(rm)の組み合わせは非常に便利ですが、オプションや実行パスをひとつ間違えるだけで、システムに必要な重要ファイルを根こそぎ消し去ってしまう大事故に繋がります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
<<関連記事>>
・JPNIC
・ISP(Internet Service Povider)
・ISO(International Organization For Standardization)
・isapnptools
・IPマスカレード
