あるディレクトリ以下のファイルを再帰的に取得して消す
キャッシュの purge 用にさらっと書いた。
あるディレクトリ以下のファイルで最近アクセスされていないものをまとめて消す。
[purge.pl]
#!/usr/bin/perl use strict; use warnings; use File::Find; use File::stat; # 探索ディレクトリ my @search_directories = ('/path/to/dir'); # このunixtimeより古いものを対象とする my $LIMIT = time - 60*60*24*60; # カウント用 my $FILE_COUNT = 0; my $RM_FILE_COUNT = 0; # 探索実行 find(\&exec, @search_directories); # 結果出力 print "$RM_FILE_COUNT / $FILE_COUNT\n"; # 見つかったファイルに対して実行するルーチン sub exec { $FILE_COUNT++; my $finded_file = "$File::Find::dir/$_"; my $stat_info = stat($finded_file) or die "oops, $finded_file"; if ($stat_info->atime < $LIMIT) { $RM_FILE_COUNT++; print "$finded_file\n". $stat_info->atime . "\t" . $stat_info->mtime . "\n\n"; my $ret = system "rm -f $finded_file"; if ($ret) { die "rm error! $finded_file: $ret"; } } }
File::Find++