Linuxで空のディレクトリをcron等で定期的に削除する方法

Web server data on a monitor

ユーザー投稿系のWEBシステムを作成する場合などに出来てしまう不要なフォルダ/ディレクトリを削除する方法をご紹介します。

「find」コマンドに「-type d」「-empty」「-delete」オプションを付加

ファイルやフォルダを探す「find」コマンドには、次のような便利なオプションがあります。

findコマンドのオプション オプションの説明
-type d 検索対象をディレクトリに制限する
-empty 検索対象をサイズが0バイト、または中身が空であるものに制限する
-delete 見つかった対象のファイル/フォルダを削除する。
※「invalid predicate `-delete’」等のエラーが出て「-delete」オプションが使えない場合
・ディレクトリ削除:「-exec rmdir {} \;」を付加する
・ファイル削除:「-exec rm {} \;」を付加する

これを組み合わせて以下のように指定します。

find (検索対象のディレクトリパス) -type d -empty -delete

cronに適用すると…

これをcron (crontab) に適用して、「/path/to/target/dir/ 」に対して1時間おき(毎時0分)に実行させるとすると、以下のようになります。

0 * * * * find /path/to/target/dir/ -type d -empty -delete

さらに特定の名前のディレクトリに制限するには?

検索対象のディレクトリ内の例えば数字のディレクトリのみ削除したい場合は「-regex」オプションで正規表現指定ができます。

find /path/to/target/dir/ -type d -empty -regex '^.+/[0-9]+$' -delete

正規表現が正しいかどうかチェックするために「-delete」オプションを外してテストしてみると良いと思います。

このページをシェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

2012-01-20