【问题标题】:How to find folder size in Perl using File::stat module?如何使用 File::stat 模块在 Perl 中查找文件夹大小?
【发布时间】:2015-02-05 19:56:24
【问题描述】:

下面是使用 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 中查找文件夹大小。请帮忙。

【问题讨论】:

    标签: linux perl


    【解决方案1】:

    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;
    

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

    【讨论】:

    • 我们不能使用 File::stat 模块而不是 File::Find 模块找到吗?
    • 没有。我解释了原因。当模块选择错误时,您为什么如此渴望使用File::stat?这是作业吗?
    • 不,谢谢。我刚刚澄清了。对不起,我没有看到你的解释
    • -f 是文件,-d 是目录。所以你的程序演示了查找文件大小而不是文件夹大小?
    • 正如我所说,“文件夹大小”通常是它包含的文件大小的总和。如果你的意思是目录节点本身占用的空间,那我帮不了你。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • OP 已询问如何使用 Perl 查找目录的总大小。我不明白这是一个 Linux 问题。他们使用的模块是File::stat,而不是File::Stat。不幸的是,它们是两个不同的模块(这意味着您不能同时在 Windows 上安装这两个模块)。
    • 更正了错字。好吧,对 Linux 目录的误解只是一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    相关资源
    最近更新 更多