【Ubuntu】find の安全な使い方:削除で事故らない

find の安全な使い方 - 削除で事故らない

この記事で解決できること

  • find の基本的な探し方(名前、拡張子、更新日時、サイズ)が分かります
  • find で削除するときに事故らない手順(まず一覧→確認→削除)が分かります
  • xargs と組み合わせるときの安全策(-print0 / xargs -0)が分かります

💡 結論(最短)

削除系はこの順番が鉄則です。

  1. まず一覧だけ出す(削除しない)
  2. 件数を確認する(思ったより多い時点で止まる)
  3. 安全な形で削除する(可能なら -print0 / xargs -0

目次

  1. find の基本(まずは探す)
  2. 更新日時・サイズで絞る
  3. 削除前の鉄則:まず「一覧」と「件数」
  4. 「削除」の安全なやり方
  5. よくある落とし穴
  6. 確認(削除後にチェック)

⚠️ 前提(対象環境)

  • OS:Ubuntu
  • シェル:bash
  • 権限:必要なら sudo(システム領域を触る場合など)

1. find の基本(まずは探す)

1-1. 名前で探す(完全一致)

$ find . -name "error.log"

1-2. 拡張子で探す(例:.log)

$ find . -name "*.log"

1-3. 大文字小文字を無視して探す

$ find . -iname "*.log"

1-4. ファイルだけ / ディレクトリだけ

$ find . -type f -name "*.log"   # ファイルだけ
$ find . -type d -name "cache"   # ディレクトリだけ

2. よく使う条件:更新日時・サイズで絞る

2-1. 直近7日以内に更新されたファイル

$ find . -type f -mtime -7

2-2. 30日より古いファイル

$ find . -type f -mtime +30

2-3. 100MBより大きいファイル

$ find . -type f -size +100M

💡 ディスク逼迫調査で「重いファイル」を探すときに便利です。

3. 削除前の鉄則:まず「一覧」と「件数」

3-1. 一覧を出す(削除しない)

例:/var/log 配下の .log を探す(※必要なら sudo)

$ sudo find /var/log -type f -name "*.log"

3-2. 件数を確認する(思ったより多いならここで止める)

$ sudo find /var/log -type f -name "*.log" | wc -l

💡 ここで件数が想定より多いなら、条件が広すぎます。-mtime-size を足して絞ってください。

4. 「削除」の安全なやり方(初心者向けの型)

削除は一発事故が起きるので、手順を固定するのがおすすめです。

4-1. まずは絞り込み(例:30日より古い .log)

$ sudo find /var/log -type f -name "*.log" -mtime +30

4-2. 次に件数確認

$ sudo find /var/log -type f -name "*.log" -mtime +30 | wc -l

4-3. それでもOKなら削除(安全策付き)

パスにスペースが混じっても壊れないように、-print0xargs -0 を使います。

$ sudo find /var/log -type f -name "*.log" -mtime +30 -print0 | sudo xargs -0 rm -f
  • -print0:結果をヌル文字区切りで出す(スペースや改行が混じっても安全)
  • xargs -0:ヌル文字区切りを正しく受け取る

rm -f は強いので、最初は「削除せず表示」→「件数」→「削除」の順番を必ず守ってください。

-delete は使っていい?(結論:慎重に)

find ... -delete はシンプルですが、条件をミスると即事故ります。

# 理解している場合のみ使用
$ sudo find /tmp -type f -mtime +7 -delete

初心者向けには、まず -print0 | xargs -0 rm の型で慣れるのが安全です。

5. よくある落とし穴(ここで事故る)

❌ パスを間違える(/ と ./ の違い)

  • find / ... はシステム全体に効くので、初心者のうちは慎重に
  • まずは対象ディレクトリを pwdls で確認してから実行
$ pwd
$ ls -la

❌ 条件が広すぎる

*.log だけだと多すぎることがあります。-mtime-size を足して絞るのが基本です。

例:30日より古く、かつ 10MB 以上

$ sudo find /var/log -type f -name "*.log" -mtime +30 -size +10M

❌ スペース/改行入りのファイル名で壊れる

これが -print0 / xargs -0 を使う最大の理由です。

6. 確認(削除後にチェック)

削除後はディスク使用量を確認します。

$ df -h

📋 検証環境

本記事のコマンドは Ubuntu 24.04 LTS / bash 5.2 で動作確認済みです。

次に読む