Linuxで空のディレクトリをcron等で定期的に削除する方法
ユーザー投稿系の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