我正在使用 Perl stat() 函数来获取目录及其子目录的大小。我有一个大约 20 个父目录的列表,它们有几千个递归子目录,每个子目录都有几百条记录。
脚本的主要计算部分如下所示:

sub getDirSize {
my $dirSize = 0;
my @dirContent = <*>;

my $sizeOfFilesInDir = 0;
foreach my $dirContent (@dirContent) {
   if (-f $dirContent) {
        my $size = (stat($dirContent))[7];
        $dirSize += $size;
   } elsif (-d $dirContent) {
        $dirSize += getDirSize($dirContent);
   }
}
return $dirSize;
}

脚本执行了一个多小时,我想让它更快。

我正在尝试使用 shell du 命令,但是 du 的输出(传输到字节)不准确。而且这也相当耗时。
我正在研究 HP-UNIX 11i v1。

最佳答案

我曾经遇到过类似的问题,并使用并行化方法来加快速度。由于您有大约 20 个顶级目录,这可能是您尝试的一种非常简单的方法。
将您的顶级目录分成几组(多少组最好是一个经验问题),多次调用 fork() 并分析子进程中的目录大小。在子进程结束时,将结果写到一些临时文件中。当所有 child 都完成后,从文件中读取结果并处理它们。

关于perl - 使用 Perl 在 unix 上获取目录和子目录大小的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2681360/

10-12 17:10
查看更多