我正在使用 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/