Linux rmdir コマンド: 空のディレクトリを削除する方法

Linux の rmdir コマンドは空のディレクトリを削除します。ファイルやサブディレクトリを含むディレクトリはそのまま残すため、内容を保持しながら空のディレクトリだけを削除することができます。

空のディレクトリの削除

削除するディレクトリのパスを指定してください。相対パスは現在の作業ディレクトリから解決されるため、コマンドを実行する前にpwdおよびls -laで場所と対象を確認してください。

rmdir empty-dir

空のディレクトリは通常、出力なしで削除されます。ファイルやサブディレクトリを含む場合は削除されず、Directory not emptyのようなエラーが表示されます。エラーメッセージはシステムの言語によって異なります。削除されたディレクトリは通常ゴミ箱に移動されないため、対象を事前に確認してください。

複数のディレクトリを指定した場合、それぞれを削除しようとします。空でないために一部が失敗しても、他の対象は削除される場合があるので、この操作を完全に成功するか完全にキャンセルされるものとして考えてはいけません。

rmdir first-dir second-dir

自分で試してみてください

既存のファイルと重ならない場所で次の練習を行ってください。もしrmdir-practiceがすでに存在する場合は、別の名前を選び、ディレクトリの作成に失敗した場合は次のコマンドを実行しないでください。異なる名前を使用する場合は、以下のコマンド内のrmdir-practiceをその名前に置き換えてください。

mkdir rmdir-practice

作成が成功した場合、以下のコマンドで練習ディレクトリに入り、空のディレクトリとファイルを含むディレクトリを作成してください。

cd rmdir-practice
mkdir empty busy
touch busy/example.txt

emptyは空で、busyはファイルを含んでいます。両方のディレクトリを順番に削除してみてください。

rmdir empty
rmdir busy

最初のコマンドはemptyを削除します。2つ目はbusyが空でないため失敗し、ファイルは残ります。次のコマンドを使用すると、隠し項目も確認できます。

ls -la busy

出力の.および..は、現在のディレクトリと親ディレクトリを指します。他にファイルやサブディレクトリがある場合は空ではありません。次の-pの練習もこのディレクトリで行います。練習ファイルを削除する際は、まず対象を確認してください。

親ディレクトリまで削除するための-pオプション

-pまたは--parentsは、指定されたディレクトリから順番に親ディレクトリまで削除しようとします。その時点で各ディレクトリは空でなければなりません。以下の方法で練習ディレクトリで確認できます。

mkdir -p a/b/c
rmdir -p a/b/c

他のコンテンツがなければ、c、b、a の順で削除されます。親ディレクトリに他のファイルがある場合、下位ディレクトリの削除は成功するかもしれませんが、親ディレクトリの削除は失敗する可能性があります。したがって、実行する前に削除対象のパス全体が意図したものであることを確認してください。練習が終わったら、cd .. を使って親ディレクトリに戻ってください。

処理の表示と空でないディレクトリの扱い

-v または --verbose は処理中のディレクトリに関するメッセージを表示します。削除が実際に行われたかどうかを確認するには、エラーメッセージを確認してください。

rmdir -v empty-dir

GNU rmdirの--ignore-fail-on-non-emptyは、ディレクトリが空でないために発生する削除失敗を無視します。ディレクトリやその内容は削除されません。次のコマンドは、練習用ディレクトリの親ディレクトリから実行されます。

rmdir --ignore-fail-on-non-empty rmdir-practice/busy

このオプションは、ディレクトリが空でない場合のみ無視します。パスが存在しない場合や権限不足などの他のエラーを無視するオプションではありません。無視された失敗のみが発生した場合、終了ステータスは成功と表示されることがあるため、終了ステータスだけで全てのディレクトリが削除されたかどうかを判断しないでください。オプションの詳細な挙動はGNU rmdirマニュアルで確認できます。

削除が失敗した場合の確認

  • 空ではありません: ls -la directoryで隠しファイルやサブディレクトリを確認するには、directoryを実際のパスに置き換えてください。一般的なlsでは、名前がドットで始まる項目は表示されない場合があります。
  • 権限の問題: 対象やその親ディレクトリの権限、所有権、ファイルシステムの状態を確認してください。削除には通常、親ディレクトリに対する書き込みおよび検索権限が必要であり、他の制限が適用されることもあります。
  • パスまたは対象の問題: 名前と現在の場所を確認してください。ディレクトリを指すシンボリックリンクはディレクトリ自体とは異なるため、ls -ldで確認してください。

rmdir * は、シェルが現在のディレクトリ内の複数の名前をコマンドに渡すことを可能にします。ファイルも含まれることがありますが、通常は隠し名前は含まれませんので、まず ls -la で対象を確認し、必要なディレクトリを指定する方が安全です。ファイルを含むディレクトリを削除する必要がある場合、rmdir では削除できず、内容を確認した上でファイルの削除を別途決定する必要があります。