【发布时间】:2012-11-04 23:47:20
【问题描述】:
我只是想获取一个给定带有通配符的路径的文件名列表。
my $path = "/foo/bar/*/*.txt";
my @file_list = glob($path);
foreach $current_file (@file_list) {
print "\n- $current_file";
}
大多数情况下这工作得很好,但如果有一个大于 2GB 的文件,在 /foo/bar/* 子路径之一的某个地方,glob 返回一个空数组,没有任何错误或警告。
如果我删除文件文件或添加这样的字符/括号序列:
my $path = "/foo/bar/*[0-9]/*.txt";
或
my $path = "/foo/bar/*1/*.txt";
然后 glob 再次工作。
更新:
这是一个示例(出于业务政策的原因,我必须屏蔽路径名):
[root]/foo/bar # ls -lrt
drwxr-xr-x 2 root system 256 Oct 11 2006 lost+found
drwxr-xr-x 2 root system 256 Dec 27 2007 abc***
drwxr-xr-x 2 root system 256 Nov 12 15:32 cde***
-rw-r--r-- 1 root system 2734193149 Nov 15 05:07 archive1.tar.gz
-rw-r--r-- 1 root system 6913743 Nov 16 05:05 archive2.tar.gz
drwxr-xr-x 2 root system 256 Nov 16 10:00 fgh***
[root]/foo/bar # /home/user/test.pl
[root]/foo/bar #
删除 >2GB 文件(或使用“/foo/bar/[acf]/”而不是“/foo/bar//”进行通配)
[root]/foo/bar # ls -lrt
drwxr-xr-x 2 root system 256 Oct 11 2006 lost+found
drwxr-xr-x 2 root system 256 Dec 27 2007 abc***
drwxr-xr-x 2 root system 256 Nov 12 15:32 cde***
-rw-r--r-- 1 root system 6913743 Nov 16 05:05 archive2.tar.gz
drwxr-xr-x 2 root system 256 Nov 16 10:00 fgh***
[root]/foo/bar # /home/user/test.pl
- /foo/bar/abc***/heapdump.phd.gz
- /foo/bar/cde***/javacore.txt.gz
- /foo/bar/fgh***/stuff.txt
[root]/foo/bar #
有什么建议吗?
我正在与: Perl 5.8.8 艾克斯 5.3 文件系统是本地 jfs。
【问题讨论】:
-
这是造成问题的整个程序吗?我要问的唯一原因是早期的
glob可能会影响后来的glob返回的内容。 -
问题出现在更复杂的代码上,但这个问题完美地复制了这个snipplet。
-
你能在某处显示尽可能小的可重现测试用例和实际数据文件吗?
-
我有一个关于这个问题的小更新。该问题似乎与其中一个子路径中大于 2GB 的任何文件严格相关。
-
perl -V:uselargefiles(大写“V”)的输出是什么