findコマンドだけで空フォルダを一括削除(-empty -deleteオプション)

findコマンドを使って空フォルダを一括削除するには以下のようにする。

find /path/to/dir -type d -empty -delete

オプションの意味は以下の通り。

  • -type d : ディレクトリを対象にする
  • -empty : 空のディレクトリを対象にする
  • -delete : マッチしたディレクトリを削除する

上記コマンドは/path/to/dir以下の空のディレクトリを再帰的に削除する。

注意点

-deleteオプションをつけると削除されるので、その前に-deleteオプションなしで実行し、何が削除されるかを確認するとよい。

find /path/to/dir -type d -empty
...

この出力を確認し、削除対象であると確認してから-deleteオプションをつけて実行する。

出力しつつ削除する(-printオプション)

-deleteオプションを指定すると削除されたディレクトリの名前が表示されない。

削除されたディレクトリの名前を表示しつつ削除するには-printオプションを指定する。

find /path/to/dir -type d -empty -delete -print 

コマンドの例

$ mkdir -p a b/c d/e/f
$ touch b/c/a.txt
$ tree
.
├── a
├── b
│   └── c
│       └── a.txt
└── d
    └── e
        └── f
$ find . -type d -empty -delete -print
./a
./d/e/f
./d/e
./d
$ tree
.
└── b
    └── c
        └── a.txt

b/c/a.txtにファイルを設置しているためそれ以外のディレクトリが再帰的に削除されている。