我需要刪除給定文件夾下的所有內容(文件和文件夾)。問題是文件夾裏面有數百萬個文件和文件夾。所以我不想一次加載所有文件名。使用Perl刪除非常龐大的文件夾的最佳策略是什麼?
邏輯應該是這樣的:
- 遍歷文件夾空載一切
- 得到一個文件或文件夾
- 刪除 (詳細的文件或文件夾「X」已被刪除)
- 去下一個
我很牛逼rying是這樣的:
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();
它的正常工作,但每當「發現」讀取龐大文件夾,該應用被卡住,我可以看到系統內存爲Perl增加,直到超時。爲什麼?它試圖一次加載所有文件嗎?
感謝您的幫助。
的** **的問題僅僅是,如果你讓一個問題一個問題。你爲什麼要寫'rm'或'rd/q/s'(取決於你的操作系統)? – 2010-04-02 17:03:27
我不同意使用rm或rd更好。使用perl builtins更便於攜帶。 – frankc 2010-04-02 17:11:49
我需要通過文件刪除文件和詳細的這是否有可能?我在Windows S.O.而rmdir剛剛卡住了。我想詳細說明這個過程。 – 2010-04-02 17:26:38