Linuxでディレクトリを削除するには、中身が空のディレクトリなら rmdir、中身ごと削除するなら rm -r を使います。この記事では「Linux ディレクトリ削除」で知りたいことに直接答える形で、rmdir・rm -r の基本構文・主要オプション・実行例・注意点を整理します。すべてのコマンド例は実環境で動作確認済みです。
Linuxでディレクトリを削除する方法とは
Linuxでディレクトリを削除するコマンドは、状況によって使い分けます。
- 中身が空のディレクトリを削除する場合は
rmdir。誤って中身のあるディレクトリを削除する事故を防げます。 - 中身ごとディレクトリを削除する場合は
rm -r(rm -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
→ include → src → project の順に、末端から親へ向かって空である限り削除していきます。途中の階層に他のファイルが残っている場合は、そこで削除が止まりエラーになります。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 empty | rmdir で中身が残っているディレクトリを削除しようとした | 中身ごと削除するなら 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 | マウントポイントである、または別プロセスが使用中 | lsof や fuser で使用中のプロセスを確認してから削除する |
権限エラーが解決しない場合は、パーミッションとは?Linuxの権限の仕組みとchmodによる変更方法もあわせて確認してください。
ディレクトリ削除の注意点
rm -r/rm -rfはゴミ箱を経由せず即削除するため、基本的に元に戻せません。重要なデータは事前にバックアップを取りましょう。- 特に
rm -rf /や、変数展開に失敗したrm -rf $VAR/($VARが空だとrm -rf /と同じ意味になる)はシステムを破壊するため絶対に実行してはいけません。 - 削除前に
ls dirやfind 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 ディレクトリ名 です。
削除したディレクトリは復元できますか?
rmdir や rm -r はゴミ箱を経由せず即座に削除するため、標準の状態では復元できません。バックアップがない場合の復元は困難です。誤削除に備えるなら、事前のバックアップや trash-cli のようなゴミ箱経由の削除ツールの導入を検討してください。
空のディレクトリだけをまとめて削除する方法はありますか?
find . -type d -empty -delete を使うと、カレントディレクトリ配下にある空のディレクトリだけをまとめて削除できます。実行前に -delete を外した状態で対象を確認するのが安全です。
rmdirとrm -rの違いは何ですか?
rmdir は空のディレクトリしか削除できず、中身が残っているとエラーになり削除を中止します。rm -r はファイル削除コマンドの rm に再帰オプション -r を付けたもので、中身ごとディレクトリを削除できます。安全性を重視するなら rmdir、中身ごと確実に削除したいなら rm -r を使います。
関連記事
rm: ファイルを削除するコマンド。詳しくはLinuxでファイルを削除する方法|rmコマンドの使い方と主要オプションを解説を参照mkdir: ディレクトリを作成するコマンド。詳しくはmkdir オプション一覧|-p・-m・-vの使い方と実行例を参照find: ファイルやディレクトリを検索するコマンド。詳しくはLinux find コマンドの使い方|オプション一覧・実行例・注意点を解説を参照ls: 削除前にディレクトリの中身を確認。詳しくはls – ディレクトリやファイルの一覧を表示するコマンドを参照chmod: 削除できないときの権限確認・変更。詳しくはパーミッションとは?Linuxの権限の仕組みとchmodによる変更方法を参照cd: 削除対象のディレクトリへ移動。詳しくはcd – ディレクトリを移動するを参照
備考
- ディレクトリ削除には、対象ディレクトリの親ディレクトリへの書き込み権限が必要です。
rmdirは誤削除防止に優れますが、空でないと削除できないため、日常的な片付けにはrm -rと使い分けるのが実務的です。- シェルスクリプトで削除処理を書く場合は、削除対象のパスが空文字列にならないよう変数展開に注意してください。
参考
- manページ: man7.org rmdir(1)
- manページ: man7.org rm(1)
- GNU Coreutils: https://www.gnu.org/software/coreutils/

コメント