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

标签 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,这是错误的。

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

最佳答案

File::stat模块只不过是内置 stat 运算符的更易于访问的接口(interface)。由于 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;

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

关于linux - 如何使用 File::stat 模块在 Perl 中查找文件夹大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28341724/

相关文章:

regex - Perl: “Quantifier in {,} bigger than 32766 in regex”

linux - amazon ec2 上的 UDP 发送测试失败 - 启用所有传出流量

c# - 服务器重启后,Kestrel 绑定(bind)端口失败

android - 为什么我无法在Android手机中执行命令

c++ - 很难让 GDB 加载调试符号

perl - 在语料库中标记单词

c - 在 Linux 内核中, spin_lock_irqsave() 是否可以保护我免受信号处理程序、页面错误、schedule() 调用的影响?

windows - 在 Windows 上的 Emacs 中从 "grep-find"运行时,ack 不起作用

perl - CGI : Redirecting STDERR to file with an alteration

mysql - while 循环只存储来自 @row=$sth->fetchrow_array() perl 的一个值