regex - perl 正则表达式匹配挑战在 Windows 上查找文件夹和子文件夹的大小
问题描述
我对编程很陌生,但是已经编写了一个脚本,该脚本使用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 文件。
因此,任何建议或指出我正确的方向将不胜感激。
谢谢你。
解决方案
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
推荐阅读
- c# - Labell.Text 只会更新一次
- python - 熊猫:Any() All() with if/else
- python - 如何在python中访问派生属性类中的方法和属性
- c++ - 如何判断函数参数是否可以安全删除
- amazon-web-services - Cloudformation 参数 ViewerProtocolPolicy:“重定向到 https”正在失效
- git - Notepad++ 找不到 COMMIT_EDITMSG 文件
- sql - 需要拆分逗号分隔的字符串并循环它
- javascript - 按特定属性的最大值过滤数组元素
- excel - 在 VBA 中的 2 个工作簿中基于多个条件删除行
- android - LiveData 未设置,观察者从未被调用