如何使用File :: stat模块在Perl中查找文件夹大小?

时间:2015-02-05 10:37:24

标签: linux perl

以下是使用File::stat模块查找文件大小的Perl脚本:

#!/usr/bin/perl

use strict;
use warnings;

use File::stat;

my $directory = "/home/dinkar/index.html";

my $dirStats  = stat($directory);
my $size      = $dirStats->size;

printf("Size of %s: %d", $directory, $size);
printf("\n");

我得到正确的文件大小输出,但此代码不适用于查找文件夹大小。它只需要计算文件夹中的文件数。例如,如果文件夹/home/dinkar中有八个文件,我将该文件夹的输出设为8,这是错误的。

我想使用File::stat module在Perl中找到文件夹大小。请帮忙。

2 个答案:

答案 0 :(得分:5)

File::stat模块只是内置stat运算符的更易访问的接口。由于stat没有提供检索"尺寸的方法。目录,File::stat

目录的大小是指它包含的所有文件的大小总和,或者是在它下面的递归目录中。您必须手动计算,最好的工具可能是File::Find

该程序演示

use strict;
use warnings;
use 5.010;

use File::Find;

my $total;

find(sub { $total += -s if -f }, '/home/dinkar');

say $total;

如果要测量的文件很多,则可能需要几秒钟才能完成。

答案 1 :(得分:-1)

这是一个linux,而不是一个Perl问题:linux中的文件夹只是一个包含文件名的文件,因此大小就是这些名称的大小,正如您所注意到的那样。

http://tldp.org/LDP/intro-linux/html/sect_03_01.html

  

Linux系统,就像UNIX一样,在文件和目录之间没有区别,因为目录只是一个包含其他文件名称的文件

如果你想要目录中所有文件的大小,你必须通过读取所有文件 with readdir 并总结找到的文件与File :: stat来总结它们。