【发布时间】:2020-03-20 21:34:10
【问题描述】:
我对编程很陌生,但我编写了一个脚本,使用 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 文件。
因此,我们将不胜感激任何建议或指出我正确的方向。
谢谢。
【问题讨论】:
-
使用
find的no_chdir选项有帮助吗? -
在路径前加上
//?/x:/ready/...而不是x:/ready/...会有帮助吗