空のディレクトリを削除する方法

2019-01-08

findコマンドで空のディレクトリを削除する

ファイルが何も入っていない空のディレクトリがある場合、lsコマンドでディレクトリの内容を確認してファイルが無ければ削除するって事を手動でやっていると時間ばかりかかるので、findコマンドで空のディレクトリを探して、空のディレクトリがあると削除するコマンドを叩くと空のディレクトリが削除されます

空のディレクトリを探すfindのオプションは「-type d -empty」で空のディレクトリに探します。その結果を「xargs」、「exec」、「delete」等で使ってディレクトリを削除します

xargsを使用した場合のコマンド

$ find . -type d -empty | xargs rm -rf

 

-execを使用した場合のコマンド

$ find . -type d -empty -exec rm -rf {} \;

 

-deleteを使用した場合のコマンド

$ find . -type d -empty -delete

findのmanページで下記のような事が書いてありましたので、-deleteのオプションを使用する場合は注意して下さい

警告: 忘れないでいただきたいが、find のコマンドラインは一つの式 (expression) として評価されるので、一番最初に -delete を指定すると、 find は、指定された探索の開始点以下にあるものを、ことごとく消去しようとする。 後で -delete を付けて使用するつもりで、find のコマンドラインをテスト実行するときは、-depth を明示的に指定するとよい。 そうすれば、後で「こんなはずではなかった」と慌てないですむ。 -delete を指定すると自動的に -depth が有効になるので、-prune-delete と一緒に使っても役に立たない。

manページの警告ですが、空ディレクトリのみの場合だと検索されたディレクトリごと削除されます。
下記の場合だと「/var/tmp/kara/」のディレクトリごと削除されます。空のディレクトリのみ構成になる可能性がある場合で検索起点のディレクトリを残したい場合は「find /var/tmp/kara/* -maxdepth 0 -type d -empty -delete」のように「-maxdepth 0」で検索開始のディレクトリのみしたほうがいいみたいです

$ ls /var/tmp/kara/
 kara1  kara2  kara3
 
 $ find /var/tmp/kara/ -type d -empty -delete
 $ ls -l /var/tmp/kara/
 ls: /var/tmp/kara/ にアクセスできません: そのようなファイルやディレクトリはありません
 
 $ find /var/tmp/kara/* -maxdepth 0 -type d -empty -delete
 
 [ex-adm@v9747 tmp]$ mkdir kara
[ex-adm@v9747 tmp]$ mkdir kara/kara1 kara/kara2 kara/kara3

 

スポンサーリンク