perl正则表达式匹配挑战,在Windows上查找文件夹和子文件夹的大小

问题描述 投票:2回答:1

我对编程很陌生,但是编写了一个脚本,使用示例中的以下行,使用File::Find来计算文件夹和子文件夹的大小:

find(sub { $total += -s if -f }, "$scanlocation.vir");

这在大多数情况下都有效,但是,其中一个文件夹非常深,并且显示错误:Can't cd to ../../../../../../..并已停止。

我已经尝试通过本地驱动器号,来自另一台计算机的网络分配的号,甚至是UNC \ server \ share格式来引用扫描位置。引用本地驱动器号,显示错误,其他两种方法不会出错,但也不会计算总数。

我有一个目录结尾是这样的:

 Directory of x:\ready\14235.20013336.vir\2020-01-13\HP27680588713\PUBLIC\archive\Rasphone

    03/07/2020  05:24 PM    <DIR>          .
    03/07/2020  05:24 PM    <DIR>          ..
    06/24/2013  05:22 PM                 2 rasphone.pbk
                   1 File(s)              2 bytes

     Directory of x:\ready\14235.20013336.vir\2020-01-13\HP27680588713\PUBLIC\archive\WirelessKeyView

    03/07/2020  05:24 PM    <DIR>          .
    03/07/2020  05:24 PM    <DIR>          ..
    01/13/2020  06:39 PM                 0 WirelessKeyView.txt
    01/13/2020  06:39 PM                 0 WirelessKeyViewExport.txt
                   2 File(s)              0 bytes

         Total Files **Listed:
                8693 File(s)  8,711,887,757 bytes**
                5852 Dir(s)  98,156,724,404,224 bytes free

[以为正则表达式可以提取值。我已经接近/Listed:.*File\(s\).*?bytes/gs,但是我只能匹配上面的粗体部分。

我的最终目标是获取指定文件夹的磁盘大小,包括以字节为单位的子文件夹。我已经在使用直接输出创建txt文件。

因此,任何建议或指向正确方向的建议都会受到赞赏。

谢谢。

regex perl directory size
1个回答
1
投票
my $data = do { local $/; <DATA> };

my ($total) = $data =~ /Total[ ]Files[ ]Listed: \s+ \d+ \s+ File\(s\) \s+ ([\d,]+) \s+ bytes/x
   or die("No match");

print("Total: $total\n");

__DATA__
03/07/2020  05:24 PM    <DIR>          .
03/07/2020  05:24 PM    <DIR>          ..
06/24/2013  05:22 PM                 2 rasphone.pbk
               1 File(s)              2 bytes

 Directory of x:\ready\14235.20013336.vir\2020-01-13\HP27680588713\PUBLIC\archive\WirelessKeyView

03/07/2020  05:24 PM    <DIR>          .
03/07/2020  05:24 PM    <DIR>          ..
01/13/2020  06:39 PM                 0 WirelessKeyView.txt
01/13/2020  06:39 PM                 0 WirelessKeyViewExport.txt
               2 File(s)              0 bytes

     Total Files Listed:
            8693 File(s)  8,711,887,757 bytes
            5852 Dir(s)  98,156,724,404,224 bytes free
© www.soinside.com 2019 - 2024. All rights reserved.