find の安全な使い方:削除で事故らない(-print0 / xargs -0)

find の安全な使い方:削除で事故らない(-print0 / xargs -0)

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

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

結論(最短)

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

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

前提(対象環境)

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

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

結論: findは-name/-type/-mtime/-sizeの条件を組み合わせてファイルを絞り込む検索コマンド。

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. よく使う条件:更新日時・サイズで絞る

結論: -mtime +30で30日超の古いファイル、-size +100Mで大きいファイルを絞り込みディスク逼迫調査に使う。

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. 削除前の鉄則:まず「一覧」と「件数」

結論: 削除前に必ずfind単体で一覧を出しwc -lで件数を確認してから削除操作に進むのが事故防止の鉄則。

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. 「削除」の安全なやり方(初心者向けの型)

結論: -print0とxargs -0を組み合わせることでスペース入りファイル名でも安全に削除できる定番パターン。

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

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:ヌル文字区切りを正しく受け取る

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

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

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

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

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

結論: パスの間違い・条件の広すぎ・スペース入りファイル名の3点が削除事故の主な原因となる。

$ pwd
$ ls -la

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

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

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

結論: 削除後はdf -hでディスク使用量が想定どおり改善されたかを必ず確認し、作業完了とする。

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

$ df -h

次に読む