Linuxでディレクトリを削除する方法|rmdir・rm -rの使い方と注意点を解説

コマンドリファレンス

Linuxでディレクトリを削除するには、中身が空のディレクトリなら rmdir中身ごと削除するなら rm -r を使います。この記事では「Linux ディレクトリ削除」で知りたいことに直接答える形で、rmdirrm -r の基本構文・主要オプション・実行例・注意点を整理します。すべてのコマンド例は実環境で動作確認済みです。

Linuxでディレクトリを削除する方法とは

Linuxでディレクトリを削除するコマンドは、状況によって使い分けます。

  • 中身が空のディレクトリを削除する場合は rmdir。誤って中身のあるディレクトリを削除する事故を防げます。
  • 中身ごとディレクトリを削除する場合は rm -rrm -rf で確認なしに強制削除)。ファイル削除コマンドである rm-r(再帰)オプションを付けて使います。

どちらもコマンドラインから元に戻せない削除を行うため、実行前にディレクトリの中身を確認する習慣が重要です。

目的別 ディレクトリ削除コマンド早見表

目的コマンド例説明
空のディレクトリを削除rmdir dir中身が空の場合のみ削除できる安全な方法
空の複数ディレクトリを削除rmdir dir1 dir2 dir3スペース区切りで複数指定
空の階層ディレクトリをまとめて削除rmdir -p a/b/c末端から親に向かって空の階層を順に削除
中身ごとディレクトリを削除rm -r dir再帰的にファイル・サブディレクトリごと削除
確認なしで強制的に削除rm -rf dir存在しなくてもエラーにせず即座に削除
確認しながら削除rm -ri dirファイル・ディレクトリごとに確認プロンプトを表示
空のディレクトリだけを検索して削除find . -type d -empty -delete配下の空ディレクトリだけをまとめて削除

rmdirコマンドの基本構文とオプション

rmdir [オプション] ディレクトリ名...

rmdir(remove directory)は空のディレクトリだけを削除するコマンドです。中身が残っている場合はエラーになり削除されないため、誤って重要なファイルごと消してしまう事故を防げます。

オプション説明使用例
(なし)単一または複数の空ディレクトリを削除rmdir dir
-p, --parents指定したパスの末端から親ディレクトリに向かって、空である限り順に削除rmdir -p a/b/c
--ignore-fail-on-non-empty中身が残っていてもエラー扱いにせず処理を継続rmdir --ignore-fail-on-non-empty dir
-v, --verbose削除したディレクトリ名を1件ずつ表示rmdir -v dir
--helpヘルプを表示rmdir --help
--versionバージョン情報を表示rmdir --version

rm -r / rm -rf でディレクトリを削除する

rm -r ディレクトリ名
rm -rf ディレクトリ名

中身のあるディレクトリを削除するには、ファイル削除コマンドの rm-r--recursive、再帰)オプションを付けます。-f--force)を加えた rm -rf は、確認プロンプトを出さず存在しないパスでもエラーにせずに強制削除する組み合わせで、スクリプトでもよく使われますが、削除対象のパスを間違えると取り返しがつかないため注意が必要です。rm 自体の基本構文・主要オプションはLinuxでファイルを削除する方法|rmコマンドの使い方と主要オプションを解説で解説しています。

実行例

空のディレクトリを削除する(rmdir)

mkdir empty_dir
rmdir empty_dir
echo $?
0

中身が空であれば削除に成功し、終了ステータスは 0 になります。

複数の空ディレクトリをまとめて削除する

mkdir dir1 dir2 dir3
rmdir dir1 dir2 dir3

スペース区切りで複数指定すると、それぞれが空であればまとめて削除されます。

rmdir -p:空の階層ディレクトリをまとめて削除する

mkdir -p project/src/include
rmdir -p project/src/include

includesrcproject の順に、末端から親へ向かって空である限り削除していきます。途中の階層に他のファイルが残っている場合は、そこで削除が止まりエラーになります。mkdir -p で作った階層を丸ごと片付けたいときに便利です。mkdir のオプションはmkdir オプション一覧|-p・-m・-vの使い方と実行例で解説しています。

中身ごとディレクトリを削除する(rm -r)

mkdir -p project/sub
touch project/sub/file.txt
rm -r project
echo $?
0

rmdir と違い、rm -r はサブディレクトリやファイルが残っていても中身ごと削除できます。

確認しながら削除する(rm -ri)

rm -ri project
rm: remove file 'project/sub/file.txt'? y
rm: remove directory 'project/sub'? y
rm: remove directory 'project'? y

ファイル・ディレクトリごとに確認プロンプトが表示されるため、意図しない削除に気づきやすくなります。-rf をいきなり使う前に、まず -ri で挙動を確認する運用もおすすめです。

空のディレクトリだけを検索して削除する(find -empty -delete)

find . -mindepth 1 -type d -empty          # まず対象を確認
find . -mindepth 1 -type d -empty -delete  # 確認後に削除

配下に大量の空ディレクトリが散らばっている場合、1件ずつ rmdir するより find と組み合わせる方が効率的です。-delete は対象が深い階層から順に削除されるため、空になった親ディレクトリも連鎖的に削除されます。find コマンドの詳しい使い方はLinux find コマンドの使い方|オプション一覧・実行例・注意点を解説を参照してください。

よくあるエラーと対処法

エラーメッセージ原因対処
rmdir: failed to remove 'dir': Directory not emptyrmdir で中身が残っているディレクトリを削除しようとした中身ごと削除するなら rm -r を使う。中身だけ確認したい場合は ls dir で内容を確認する
rm: cannot remove 'dir': Is a directory-r なしの rm でディレクトリを削除しようとした-r を付けて rm -r dir を実行する
rmdir: failed to remove 'dir': Permission denied削除対象またはその親ディレクトリへの書き込み権限がない権限を確認し、必要なら sudo rmdir / sudo rm -r を使う
rmdir: failed to remove 'dir': No such file or directoryパスの指定間違い、既に削除済みls でパスを再確認する
rm: cannot remove 'dir': Device or resource busyマウントポイントである、または別プロセスが使用中lsoffuser で使用中のプロセスを確認してから削除する

権限エラーが解決しない場合は、パーミッションとは?Linuxの権限の仕組みとchmodによる変更方法もあわせて確認してください。

ディレクトリ削除の注意点

  • rm -r / rm -rf はゴミ箱を経由せず即削除するため、基本的に元に戻せません。重要なデータは事前にバックアップを取りましょう。
  • 特に rm -rf / や、変数展開に失敗した rm -rf $VAR/$VAR が空だと rm -rf / と同じ意味になる)はシステムを破壊するため絶対に実行してはいけません。
  • 削除前に ls dirfind dir で中身を確認する、パスをコピー&ペーストして手打ちのタイプミスを避けるといった基本動作が誤削除防止に有効です。
  • 頻繁に手動でディレクトリを削除する環境では、trash-cli などゴミ箱経由の削除ツールを導入すると、誤削除時にも一定期間は復元できます。
  • スクリプト内で「なければ何もしない」削除を書きたい場合、rmdir は対象が存在しないとエラーになりますが、rm -rf は対象が存在しなくてもエラーにならず終了ステータス 0 になります。

rmdir と rm -r の使い分け

コマンド削除できる対象特徴
rmdir空のディレクトリのみ中身が残っているとエラーになり誤削除を防げる。安全性重視
rm -rディレクトリと中身すべてファイル・サブディレクトリを再帰的に削除できる汎用コマンド
rm -rfディレクトリと中身すべて確認なし・存在しなくてもエラーにせず強制削除。スクリプト向け
find ... -empty -delete条件に一致した空ディレクトリ(複数)大量の空ディレクトリを一括で掃除したいときに使う

「本当に空のディレクトリだけを消したい」場合は rmdir、「中身ごと確実に消したい」場合は rm -r と覚えておくと、誤削除のリスクを減らせます。

よくある質問

Linuxでディレクトリを削除する基本のコマンドは何ですか?

空のディレクトリなら rmdir ディレクトリ名、中身ごと削除するなら rm -r ディレクトリ名 を使います。確認なしで強制的に削除したい場合は rm -rf ディレクトリ名 です。

rmdirで「Directory not empty」と表示されたらどうすればいいですか?

対象のディレクトリに中身が残っていることを意味します。ls ディレクトリ名 で中身を確認したうえで、中身ごと削除してよければ rm -r ディレクトリ名 を使います。

中身ごとディレクトリを削除するにはどうすればよいですか?

rm -r ディレクトリ名 を使います。確認プロンプトを出しながら削除したい場合は rm -ri ディレクトリ名、確認なしで強制的に削除したい場合は rm -rf ディレクトリ名 です。

削除したディレクトリは復元できますか?

rmdirrm -r はゴミ箱を経由せず即座に削除するため、標準の状態では復元できません。バックアップがない場合の復元は困難です。誤削除に備えるなら、事前のバックアップや trash-cli のようなゴミ箱経由の削除ツールの導入を検討してください。

空のディレクトリだけをまとめて削除する方法はありますか?

find . -type d -empty -delete を使うと、カレントディレクトリ配下にある空のディレクトリだけをまとめて削除できます。実行前に -delete を外した状態で対象を確認するのが安全です。

rmdirとrm -rの違いは何ですか?

rmdir は空のディレクトリしか削除できず、中身が残っているとエラーになり削除を中止します。rm -r はファイル削除コマンドの rm に再帰オプション -r を付けたもので、中身ごとディレクトリを削除できます。安全性を重視するなら rmdir、中身ごと確実に削除したいなら rm -r を使います。

関連記事

備考

  • ディレクトリ削除には、対象ディレクトリの親ディレクトリへの書き込み権限が必要です。
  • rmdir は誤削除防止に優れますが、空でないと削除できないため、日常的な片付けには rm -r と使い分けるのが実務的です。
  • シェルスクリプトで削除処理を書く場合は、削除対象のパスが空文字列にならないよう変数展開に注意してください。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント