Linux / コマンド / rmdir - 空のディレクトリを削除

rmdirは内容のないディレクトリのみを削除するコマンドです。ファイルやサブディレクトリが残っていると失敗するため、再帰削除が必要ない状況で意図しないデータ削除を防ぐ安全装置となります。

この記事では基本的な使い方、-pで空の親ディレクトリを一緒に削除する方法、削除失敗の原因、およびrm -rとの違いを説明します。

rmdirコマンドとは?

rmdirは指定した空のディレクトリを削除します。隠しファイルを含む項目が1つでもあれば削除せず、一般ファイルにも使用できません。ディレクトリ自体を削除する権限は、そのディレクトリ内部ではなく親ディレクトリの書き込み・実行権限に関係します。

基本的な文法

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

ファイル名やパスに空白がある場合は引用符で囲み、ハイフンで始まる名前は可能であれば--の後に指定します。サポートされるオプションはディストリビューションとGNU Coreutilsのバージョンによって異なる場合があるため、rmdir --helpとman rmdirで現在のシステムの説明を確認してください。

rmdirの基本的な使い方

空のディレクトリを1つ削除する

対象ディレクトリに項目がなければ削除されます。

rmdir old-cache

複数の空のディレクトリを削除する

複数のパスを指定すると、各パスを順番に処理します。一部が失敗することがあるため、終了状態とメッセージを確認してください。

rmdir empty-a empty-b empty-c

空の親ディレクトリまで削除する

-pは、指定したパスを削除した後、空になった親ディレクトリを順番に削除します。例えば、以下のコマンドはa/b/c、a/b、aの順に試行します。

rmdir -p a/b/c

空のディレクトリ削除結果を確認する

rmdirは、空のディレクトリを削除する際に個別のメッセージを出しません。まだ empty-demo という項目がない、自分が所有する練習用ディレクトリで実行してください。作成の基本はmkdirコマンドの使い方で確認できます。

mkdir empty-demo
rmdir empty-demo
test ! -e empty-demo
echo $?

例の出力は0です。これはtestでパスが存在しない条件が成立したことを意味します。ディレクトリ内に隠しファイルがあればrmdirは失敗するため、まず内容を確認してください。

主なオプション

オプション 説明
-p, --parents 対象と空の上位ディレクトリを順番に削除します。
-v, --verbose 処理する各ディレクトリについてメッセージを出力します。
--ignore-fail-on-non-empty 空でないために削除できない場合の診断を抑え、その理由では失敗終了にしません。存在しないパスや権限など、他の失敗まで無視する指定ではありません。

長いオプションは意味を把握しやすく、スクリプトの確認にも役立ちます。ただし、移植性が重要なスクリプトでは対象システムがその GNU 拡張オプションをサポートしているかをまず確認してください。

実践的活用例

本当に空か確認する

一般的なlsは隠し項目を見逃す可能性があります。削除が失敗した場合はls -laやfindで内部項目を確認してください。

ls -la old-cache
find old-cache -mindepth 1 -maxdepth 1 -print

スクリプトで空の場合のみ整理する

空でない場合はそのまま残す整理作業に適しています。次の例は成功時だけメッセージを表示する簡易な例で、2>/dev/null によって権限エラーなどの診断もすべて隠します。原因を記録したい処理ではこのリダイレクトを外し、終了状態と診断を確認してください。

if rmdir -- cache-dir 2>/dev/null; then
  printf '%s\n' '空のキャッシュディレクトリを削除しました.'
fi

長い空のパスを段階的に整理する

-pvを一緒に使うと、どの段階まで削除されたか確認しやすくなります。保存すべき上位パスがある場合は-pの代わりに各パスを明示的に削除してください。

rmdir -pv build/tmp/session

rmdirと関連コマンドの比較

コマンド・方法 主な役割 適した状況
rmdir 空のディレクトリのみ削除 内容が残っている場合は保持する必要があるとき
rm -d 空のディレクトリを削除可能 GNU rm の文脈でファイルと一緒に処理するとき
rm -r 内容を含めて再帰的に削除 全ツリーを意図的に削除するとき
find -empty -delete 条件に合った空の項目を探索・削除(この指定だけでは空の通常ファイルも対象) 複数の空のパスをルールに従って整理するとき

使用する際の注意点

隠しファイルも内容です

.keepや.gitignoreのような隠しファイルがある場合、空のディレクトリではないため削除されません。

-pの範囲を確認する

深いパスを指定すると、予想より上の親まで空であれば一緒に削除されることがあります。保存の境界を明確にしてください。

失敗を無条件にエラーとして見ない

空でなくて失敗した場合、それはデータが残っているという信号かもしれません。自動化では原因を確認した後に続行するかどうかを決定してください。

FAQ

ファイルが入っているディレクトリもrmdirで削除できますか?

いいえ。rmdirは空のディレクトリのみ削除します。内容まで削除する場合は、範囲を確認してからrm -rを使用する必要があります。

空に見えるのに削除できない理由は何ですか?

隠しファイルやマウントポイント、権限の問題である可能性があります。ls -laおよびfindで内容を確認してください。

親ディレクトリまで一度に削除するにはどうすればいいですか?

rmdir -p パスを使用します。各段階が空のときにのみ削除されます。

rm -rよりrmdirの方が安全ですか?

内容が残っているディレクトリを削除しないという点では安全です。ただし、指定したパスが正しいかどうか確認するという原則は同じです。

参考資料