特定のフォルダの下にあるすべてのコンテンツ(ファイルとフォルダ)を削除する必要があります。問題は、フォルダ内に何百万ものファイルとフォルダがあることです。したがって、すべてのファイル名を一度にロードしたくありません。
ロジックは次のようになります。
- すべてをロードせずにフォルダを繰り返す
- ファイルまたはフォルダを取得する
- それを削除し ます(ファイルまたはフォルダ「X」が削除されたことを意味します)
- 次のものに行きます
私はこのようなことを試みています:
sub main(){
my ($rc, $help, $debug, $root) = ();
$rc = GetOptions ( "HELP" => \$help,
"DEBUG" => \$debug,
"ROOT=s" => \$root);
die "Bad command line options\n$usage\n" unless ($rc);
if ($help) { print $usage; exit (0); }
if ($debug) {
warn "\nProceeding to execution with following parameters: \n";
warn "===============================================================\n";
warn "ROOT = $root\n";
} # write debug information to STDERR
print "\n Starting to delete...\n";
die "usage: $0 dir ..\n" unless $root;
*name = *File::Find::name;
find \&verbose, @ARGV;
}
sub verbose {
if (!-l && -d _) {
print "rmdir $name\n";
} else {
print "unlink $name\n";
}
}
main();
正常に動作していますが、「find」が巨大なフォルダを読み取るたびに、アプリケーションがスタックし、Perlのシステムメモリがタイムアウトまで増加しているのを確認できます。なんで?すべてのファイルを一度にロードしようとしていますか?
ご協力いただきありがとうございます。