rmdirの使い方

2018-09-05  /  Shell Script

rmdirは対象のディレクトリが空の時だけ削除できる。そのため、中身は問わずディレクトリ消したいときは、rm -frを使用していた。Linuxを使い始めてから長いことそうしていて、rmdirを使うことはほとんどなかった。

確実に空のディレクトリだけを削除できる

この1年くらいコードの整理をする機会が増えたため、確実に空のディレクトリだけ削除したいということが増えた。最初はfindなどで中身が空か確認してから削除するようにしていた。しかしfind -> rm -frというのも手間なので、rmdirを使用するようになった。

rm -rでいいのでは?とも思ったが、rm -frとついつい誤って打ってしまうことがありコマンド自体を使い分けることにした。

rmdirの対象が空ではない場合、

  1. rmdirで失敗する
  2. 中身を確認する
  3. 残っているファイルを処理する(だいたいrmする)
  4. 改めてrmdirを実行

というフローを踏むようになった。たまに本当に消してはいけない何かがあることがあり、誤って消してしまうような致命的なミスは避けられるようになった。

ちょっと便利なオプション

rmdirにも当然オプションがあり、とりあえず空のディレクトリをガサッと消すぞ!みたいなときに使える。

--ignore-fail-on-non-empty: 対象が空のディレクトリではなく、削除できなかった時にfailしない。forやxargsと組み合わせて削除していく際に、このオプションを付与したりする。

-p: 対象のディレクトリの親も削除する。mkdir -pの逆の動作をする。manには以下のように書いてある。

‘rmdir -p a/b/c’ is similar to ‘rmdir a/b/c a/b a’

とりあえず雑に以下のような使い方をする。

$ find target_dir -type d | xargs rmdir --ignore-fail-on-non-empty -p

あまり嬉しくないのは、どのディレクトリを消したか教えてくれるオプションがないこと。なので、その辺を確認したいときはあらかじめfindで一覧を残しておく。

あとrmdir.を渡すとrmdir: failed to remove '.': Invalid argumentとして怒られる。

おしまい