rmdirの使い方
2018-09-05 / Shell Script
rmdir
は対象のディレクトリが空の時だけ削除できる。そのため、中身は問わずディレクトリ消したいときは、rm -fr
を使用していた。Linuxを使い始めてから長いことそうしていて、rmdir
を使うことはほとんどなかった。
確実に空のディレクトリだけを削除できる
この1年くらいコードの整理をする機会が増えたため、確実に空のディレクトリだけ削除したいということが増えた。最初はfind
などで中身が空か確認してから削除するようにしていた。しかしfind -> rm -fr
というのも手間なので、rmdir
を使用するようになった。
rm -r
でいいのでは?とも思ったが、rm -fr
とついつい誤って打ってしまうことがありコマンド自体を使い分けることにした。
rmdir
の対象が空ではない場合、
rmdir
で失敗する- 中身を確認する
- 残っているファイルを処理する(だいたい
rm
する) - 改めて
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
として怒られる。
おしまい