rmdirはディレクトリを削除するLinuxコマンドだ。
CUIでディレクトリを削除することはよくある作業だ。難しくないコマンドだが、覚えておいた方がいいオプションもある。
rmコマンドとの違いもご紹介しているのでセットで覚えておこう。
目次
rmdirコマンドの基本
コマンドの基本動作
rmdirコマンドでディレクトリを削除するのは次のように簡単だ。
$ rmdir ディレクトリ名
例えば、work01ディレクトリを削除するには、次のコマンドだ。
$ rmdir work01
work01ディレクトリが削除された。
上記rmdirコマンドを試すなら下のコマンドをLinux上で実行すればすぐに再現可能だ。
1 2 3 4 |
mkdir work01 ls -l work01 rmdir work01 ls -l work01 |
コマンドの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション-p(オプション--parents)
親ディレクトリも削除する
オプション--ignore-fail-on-non-empty
ディレクトリが空ではないときに出るエラーを表示しない
オプション-v(オプション--verbose)
ディレクトリを削除した結果のメッセージを表示する
ひとつずつ見ていこう。
-pオプション(--parentsオプション):親ディレクトリも削除する
階層の深いディレクトリを削除する際、何もオプションを指定しなければ、ディレクトリに指定した中で一番階層の深いファイルのみが削除される。
-pオプション(--parentsオプション)を指定することで、ディレクトリに指定したすべてのディレクトリが削除される。
すべてのディレクトリを削除対象とするには次のコマンドだ。
$ rmdir -p ディレクトリ名
試しに-pオプション(--parentsオプション)を指定せずに、階層の深いwork02ディレクトリの中のsub01ディレクトリの中のdata01ディレクトリを削除してみよう。
$ rmdir work02/sub01/data01
確認してみよう。
$ ls –lR work02
最下層のdata01のみが削除された。
1 2 3 |
mkdir -pv work02/sub01/data01 rmdir work02/sub01/data01 ls -lR work02 |
今度は-pオプション(--parentsオプション)を指定し、親ディレクトリも同時に削除してみよう。
階層の深いwork03ディレクトリの中のsub01ディレクトリの中のdata01ディレクトリの親ディレクトリも含み、すべてを削除するには、次のコマンドだ。
$ rmdir -p work03/sub01/data01
確認してみよう。
$ ls –lR work03
work03自体が削除され見つからなくなった。
1 2 3 |
mkdir -pv work03/sub01/data01 rmdir -p work03/sub01/data01 ls -lR work03 |
--ignore-fail-on-non-emptyオプション:ディレクトリが空ではないときに出るエラーを表示しない
何もオプションを指定しなければ、空ではないディレクトリを削除する際にエラーが表示される。
このエラーを表示しないようにするには次のコマンドだ。
$ rmdir --ignore-fail-on-non-empty ディレクトリ名
まず、--ignore-fail-on-non-emptyオプションを指定せずに、ディレクトリを削除したらどうなるか確認してみよう。
次のコマンドで、work04ディレクトリの中にsub03ディレクトリを作り、さらにその中にdata03ディレクトリを作っておく。
$ mkdir -pv work04/sub03/data03
次のコマンドで、work04ディレクトリの中にsub03ディレクトリの中にtest.datファイルを作っておく。
$ echo "test" > work04/sub03/test.dat
この時点で、work04ディレクトリ内の構造を確認しておこう。
$ ls –lR work04
work04ディレクトリの中にsub03ディレクトリの中に、data03ディレクトリとtest.datファイルが入っている。
--ignore-fail-on-non-emptyオプションを指定せずにwork04ディレクトリを削除したらどうなるか確認してみよう。
$ rmdir work04
work04ディレクトリは空ではないため、削除できないというエラーメッセージが表示される。
今度は--ignore-fail-on-non-emptyオプションを指定して、エラーメッセージが表示されないか確認してみよう。
ディレクトリが空ではないwork04ディレクトリを削除しようとする時にエラーメッセージが表示されないようにするは、次のコマンドだ。
$ rmdir --ignore-fail-on-non-empty work04
エラーメッセージが表示されない。
work04ディレクトリは削除されているのか確認してみよう。
$ ls –lR work04
削除はされていない。エラーメッセージが表示しないだけだ。
1 2 3 4 5 6 |
mkdir -pv work04/sub03/data03 echo "test" > work04/sub03/test.dat ls –lR work04 rmdir work04 rmdir --ignore-fail-on-non-empty work04 ls –lR work04 |
実際にディレクトリ内もすべて削除したい場合は、rmコマンドの-rオプションでディレクトリ内もすべて削除するコマンドを使う。
work04ディレクトリとその中をすべて削除する場合は、次のコマンドだ。
$ rm -r work04
実際にwork04ディレクトリは削除されているのか確認してみよう。
$ ls –lR work04
work04が削除されたため、見つからなくなった。
1 2 |
rm -r work04 ls –lR work04 |
rmコマンドでは、一度にすべて削除されてしまうので操作は慎重にしよう。
-vオプション(--verboseオプション):ディレクトリを削除した結果のメッセージを表示する
ディレクトリの削除の記録を取るオプションだ。
次のコマンドで、work05ディレクトリの中にsub05ディレクトリを作り、さらにその中にdata05ディレクトリを作っておく。
$ mkdir -pv work05/sub05/data05
結果を記録しながら、内容が空ではないwork05ディレクトリの中すべてを削除するコマンドは次の通りだ。
$ rmdir -pv work05/sub05/data05
結果を表示しながら、work04以下のディレクトリが削除された。
1 2 |
mkdir -pv work04/sub04/data04 rmdir -pv work04/sub04/data04 |
rmコマンドとの違い
rmdirコマンドは一見rmコマンドの-rオプションが付与された動作と似ているが、空ではないディレクトリに関しての動作が違っている。
a/b/c/d/eという多重のディレクトリ構造は、rmdir –r aのコマンドでは削除できず、rmdir –r a/b/c/d/eと最後のディレクトリまで記述しなければならない。
さらにディレクトリcの中にファイルxがある場合は、一度のコマンド入力では削除できないのだ。
非常に誤解しやすいのだが、rmdirコマンドは、フォルダをゴミ箱に捨てるようなイメージと違い、親ディレクトリからその下層のディレクトリを一度に削除できない。
その点、空ではないディレクトリの削除はrmコマンドの-rオプションの方が簡単だ。
しかし、rmコマンドでは一度の操作で指定したすべてのディレクトリやその中のファイルを削除してしまう。きちんと確認しないと危険でもあるコマンドだ。
rmdirは削除の対象があくまでディレクトリなので、ファイルを間違って消すことはないだろう。
動作の違いを理解して、使用するケースに合わせて適切な削除のコマンドを選択してほしい。
関連項目
最後にrmdirコマンドに関連して、基本的なファイルやディレクトリ操作のコマンドも紹介しておく。
mkdirコマンド
ディレクトリを作成する。
rmコマンド
ファイルやディレクトリを削除する。
まとめ
rmdirコマンドについてまとめてみた。
rmコマンドよりは頻度が落ちるが、こちらもよく使うコマンドの一つだ。度々調べるのではなく、覚えやすいコマンド名(remove directory)でもあるので、オプションと一緒に覚えてしまおう。
コメント