find -deleteオプションを完全解説!初心者でもできるLinuxファイル削除の基本
生徒
「findコマンドでいらないファイルを探せたんですが、それを一気に削除する方法ってありますか?」
先生
「ありますよ!-deleteオプションを使えば、検索結果をそのまま削除することができます。」
生徒
「それって危なくないですか?間違って大事なファイルまで消しちゃいそうで…」
先生
「確かに慎重に使う必要はありますが、安全な使い方を覚えればとても便利ですよ。一緒に学んでみましょう。」
1. find -deleteオプションとは?
findコマンドの-deleteオプションは、検索で見つけたファイルやディレクトリをそのまま削除する機能です。つまり「探して→削除する」を1つのコマンドで完了できます。
-exec rm {} \;のようにrmコマンドと組み合わせる必要がなく、よりシンプルに書ける点が魅力です。
2. 基本的な使い方
たとえば、カレントディレクトリから.logという拡張子のファイルを削除したい場合、次のように書きます。
find . -name "*.log" -delete
これだけで、現在のフォルダ以下にある.logファイルがすべて削除されます。とても簡単ですが、間違えると大事なデータを消してしまうこともあるので、実行前に確認するクセをつけましょう。
3. 実行前に確認する方法(-printとの併用)
-deleteを実行する前に、まずは何が削除されるのかを-printで確認すると安心です。
find . -name "*.log" -print
./error.log
./old/system.log
上記のように表示されたファイルを確認して問題がなければ、同じ条件に-deleteを付けて実行します。
find . -name "*.log" -delete
4. ファイルだけを削除したい場合
-deleteは、ディレクトリも削除対象になることがあります。ファイルだけに限定したいときは、-type fオプションを追加しましょう。
find . -type f -name "*.tmp" -delete
このコマンドは、.tmpという拡張子のファイルだけを安全に削除します。-type fは「通常のファイルのみ」を対象にする指定です。
5. 空のディレクトリだけを削除したい場合
今度は、不要になった空のフォルダだけを削除したいケースです。そんなときは-type d(ディレクトリ)と-empty(中身が空)を組み合わせて使います。
find . -type d -empty -delete
これは非常に便利で、ログ出力先や一時フォルダの掃除などに活用できます。
6. -delete使用時の注意点
- 検索対象のパスは、なるべく限定すること(例:
find /home/user/tmpなど) - -deleteは最後に書くこと(findは処理順に実行するため)
- 確認せずに実行しない(
-printなどで事前確認が必須)
たとえば、次のように書いてしまうと、削除対象が思ったより広くなってしまうことがあります。
find . -delete -name "*.log"
このような順番だと、findはまずすべてを削除してしまい、そのあとに-name "*.log"を見ても意味がありません。
7. xargsとの違いとメリット
findコマンドとxargsを組み合わせる方法もありますが、-deleteはそれよりも簡潔です。
find . -name "*.bak" | xargs rm
この方法は安全性にやや欠ける場合があり、ファイル名にスペースがあると失敗することもあります。その点で-deleteは初心者にも扱いやすい選択肢です。
8. sudoやrootでの削除
システムディレクトリ内の不要ファイルを削除するには、sudoやroot権限が必要な場合があります。たとえば、/var/log内の古いファイルを削除したいとき:
find /var/log -name "*.gz" -mtime +30 -delete
これは、30日より古い圧縮ログファイル(.gz)を自動で削除します。保守作業としてもよく使われる例です。