2011-06-07 54 views
3

这是我当前如何删除文件及子目录如何有效地删除文件和迪尔斯一长串/阵列在Perl

foreach my $row(keys %$rows) 
{ 
    my $md5 = $rows->{$row}->{'md5'}; 
    my $path = "/some/path/jpg/".substr($md5, 0, 3)."/$md5"; 

    `rm -rf $path`; 
    print "removed - ".$path."\n"; 
} 

有文件/显示目录需要删除几十万,所以我希望看到更好的解决方案,而不是为每个文件/目录调用“rm -rf”。

也许结合数组中的文件/目录列表,然后将此数组传递给单个“rm -rf”调用?

回答

10

使用rmtreeFile::Path。除了可移植性以外,它还使用Perl的内置unlink,而不是每次需要删除目录时启动整个shell,这就是您现在正在执行的操作。

+3

没有想到插入一个没有引号的'$ path'的问题...... – 2011-06-08 00:23:06

+0

这是否意味着'rmtree'仍然在'foreach'循环中并且运行数十万次? – Alex 2011-06-09 04:34:04