File::Find を使用して、1) 特定のフォルダーとサブフォルダーを調べて、30 日以上経過したファイルを削除し、b) すべての削除後に親フォルダーが空の場合は、それも削除します。
これが私のコードです:
use strict;
use warnings;
no warnings 'uninitialized';
use File::Find;
use File::Basename;
use File::Spec::Functions;
# excluding some home brew imports
# go into given folder, delete anything older than 30 days, and if folder is then empty, delete it
my $testdir = 'C:/jason/temp/test';
$testdir =~ s#\\#/#g;
open(LOG, ">c:/jason/temp/delete.log");
finddepth({ wanted => \&myWanted, postprocess => \&cleanupDir }, $testdir);
sub myWanted {
if ($_ !~ m/\.pdf$/i &&
int(-M $_) > 30
)
{
my $age = int(-M $_);
my $path = $File::Find::name;
print LOG "age : $age days - $path\n";
unlink($path);
}
}
sub cleanupDir {
my $path = $File::Find::dir;
if ( &folderIsEmpty($path) ) {
print LOG "deleting : $path\n";
unlink($path);
} else {
print LOG "$path not empty\n";
my @files = glob("$path/*");
foreach my $file(@files){
print LOG "\t$file\n";
}
}
}
私は、finddepth() がツリーの最下部に移動し、上に向かって動作すると考えていましたが、そうはなりませんでした。一部の電子ブック コンテンツの解凍時に実行されるスクリプトは、すべてのファイルが削除されたにもかかわらず、サブフォルダーを含むディレクトリを削除しませんでした。
age : 54 days - C:/jason/temp/test/mimetype
age : 54 days - C:/jason/temp/test/META-INF/container.xml
age : 54 days - C:/jason/temp/test/META-INF/ncx.xml.kindle
deleting : C:/jason/temp/test/META-INF
age : 54 days - C:/jason/temp/test/OEBPS/content.opf
age : 54 days - C:/jason/temp/test/OEBPS/cover.html
age : 54 days - C:/jason/temp/test/OEBPS/ncx.xml
age : 54 days - C:/jason/temp/test/OEBPS/pagemap.xml
age : 54 days - C:/jason/temp/test/OEBPS/t01_00_text.html
age : 54 days - C:/jason/temp/test/OEBPS/t02_00_text.html
age : 54 days - C:/jason/temp/test/OEBPS/t03_00_text.html
age : 54 days - C:/jason/temp/test/OEBPS/t04_00_text.html
age : 54 days - C:/jason/temp/test/OEBPS/t05_00_text.html
age : 54 days - C:/jason/temp/test/OEBPS/t06_00_text.html
age : 54 days - C:/jason/temp/test/OEBPS/t07_00_text.html
age : 54 days - C:/jason/temp/test/OEBPS/t08_00_text.html
age : 54 days - C:/jason/temp/test/OEBPS/t08_01_text.html
age : 54 days - C:/jason/temp/test/OEBPS/media/cover.jpg
age : 54 days - C:/jason/temp/test/OEBPS/media/flamlogo.gif
age : 54 days - C:/jason/temp/test/OEBPS/media/logolnmb.jpg
age : 54 days - C:/jason/temp/test/OEBPS/media/stylesheet.css
deleting : C:/jason/temp/test/OEBPS/media
C:/jason/temp/test/OEBPS not empty
C:/jason/temp/test/OEBPS/media
C:/jason/temp/test not empty
C:/jason/temp/test/META-INF
C:/jason/temp/test/OEBPS
C:/jason/temp/test/OEBPS/media/ が削除されたように見えますが、前処理関数が呼び出されるまでにその削除は登録されていませんでした。これを機能させる方法についてのアイデアはありますか? ありがとう!
ありがとう、bp