MENU

ディレクトリを中身ごとまとめて削除する安全な実務手順

目次

まず結論:中身ごとまとめて削除するコマンド

ディレクトリとその中身(ファイル・サブディレクトリ)をすべて削除するには、rm-r(再帰)オプションを付けます。

# ディレクトリを中身ごと削除する基本形
rm -r /path/to/dir_name

実行と同時に再帰削除が始まります。Linuxにはゴミ箱がないため、削除は即座に完了し復元できません。 実行前に必ず対象を確認する習慣をつけてください。

rmdirでは中身があると削除できない

「ディレクトリを消す」というと rmdir が頭に浮かぶ方もいますが、中にファイルやサブディレクトリが1つでも残っていると次のエラーになります。

$ rmdir ./work_dir/
rmdir: failed to remove './work_dir/': Directory not empty

rmdir は「空でなければ止まる」仕様になっており、これは一種の安全装置です。スクリプトで空ディレクトリだけをクリーンアップしたいケース(ビルド後の作業ディレクトリ整理など)では積極的に使う価値があります。中身ごと消したい場面では rm -r を選んでください。

確認プロンプトをスキップして強制削除する

削除対象に書き込み禁止ファイルが含まれていると、rm -r はファイルごとに確認を求めます。自動化スクリプトなど対話なしで処理したい場合は -f を組み合わせます。

# 書き込み禁止ファイルも含めて確認なしで強制再帰削除
rm -rf /path/to/dir_name

-rf は非常に強力なため、本番環境での手作業使用は原則禁止とするチームも多いです。ある運用現場では、シェルスクリプト内の変数が未設定のまま rm -rf $TARGET/ が実行され、rm -rf / 相当の操作が走ってしまった事例があります。スクリプトで使う場合は変数の空チェックを必ず入れてください。

# スクリプト内での安全な書き方(変数が空なら即中断)
TARGET="/var/tmp/build_output"
[[ -z "$TARGET" ]] && { echo "TARGET is empty. Aborted."; exit 1; }
rm -rf "$TARGET"

削除前に対象を確認する

実際に削除する前に、何が含まれているかを把握するのが安全な運用の基本です。以下のいずれかで確認してから実行しましょう。

# ディレクトリ構造とファイル一覧を再帰表示
ls -lR /path/to/dir_name

# ツリー形式で確認(tree コマンドが入っていれば)
tree /path/to/dir_name

# find で削除対象を一覧表示(実際の削除は行わない)
find /path/to/dir_name -print

find ... -print を先に走らせる方法は、後述の条件付き削除の「ドライラン」としても機能します。表示内容を目視確認してから削除コマンドに差し替える手順を習慣にすると、ヒューマンエラーが格段に減ります。

条件を絞って特定ディレクトリだけ削除する

「古い一時ディレクトリをまとめて消したい」「特定の命名規則のディレクトリだけ削除したい」といった場合は find と組み合わせます。

# 30日以上更新されていないサブディレクトリを削除
find /var/tmp -maxdepth 1 -type d -mtime +30 -exec rm -rf {} +

# 名前が "build_" で始まるディレクトリを削除
find /home/deploy -maxdepth 2 -type d -name "build_*" -exec rm -rf {} +

-maxdepth で検索の深さを制限することで、意図しない深い階層への影響を防げます。-exec rm -rf {} + の末尾の + は見つかったパスをまとめて渡す書き方で、\;(セミコロン)よりも効率的に動作します。実行前は -exec echo {} + に差し替えてドライランを確認するのがおすすめです。

本番環境での誤削除を防ぐ実務的な安全策

本番サーバーで再帰削除コマンドを手で実行する機会がある運用では、以下の対策を組み合わせてリスクを下げましょう。

1. インタラクティブモードで1件ずつ確認する

# -i オプションで削除のたびに確認を求める
rm -ri /path/to/dir_name

2. trash-cli でゴミ箱に移してから削除する

# trash-cli のインストール(Debian/Ubuntu系)
sudo apt install trash-cli

# RHEL/Rocky/AlmaLinux 系
sudo dnf install trash-cli

# ゴミ箱に移動(復元可能)
trash-put /path/to/dir_name

# ゴミ箱の中身を確認
trash-list

# 必要なら復元
trash-restore

# 問題なければゴミ箱を空にする
trash-empty

trash-put は freedesktop.org の仕様に従いゴミ箱ディレクトリ(通常 ~/.local/share/Trash/)へ移動するため、万一の際に trash-restore で復元できます。デスクトップ環境なしのサーバーでも問題なく動作します。

3. alias で対話確認を強制する(開発・ステージング環境向け)

# ~/.bashrc または ~/.bash_aliases に追加
alias rm='rm -i'

この alias は対話シェルにのみ適用されます。スクリプト内では効かない点と、-f を付けると alias の -i が無効化される点に注意してください。あくまで「手作業での一息」を強制する仕掛けとして使うものです。

ディレクトリの再帰削除は一瞬で完了するぶん、取り返しがつかない操作です。「削除前に find -print でドライラン・変数の空チェック・重要環境では trash-put 経由」の3点セットを実務の標準手順として組み込んでおくと、現場での事故リスクを大きく下げられます。

<PR>この記事に関連するおすすめ書籍

新しいLinuxの教科書 第2版

コマンド操作から基本的な運用までを手を動かしながら体系的に学べる定番書。地力を固めたい方に。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次