gpt4 book ai didi

Perl:文件大于 2 GB 的 glob 的奇怪行为

转载 作者:行者123 更新时间:2023-12-04 02:28:28 24 4
gpt4 key购买 nike

我只是想获取给定带有通配符的路径的文件名列表。

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。

最佳答案

在没有正确答案的情况下,您将需要解决方法。我猜你在 5.8.8 的 glob() 实现中遇到了一些特定于平台的错误

我快速浏览了 CPAN 上的源代码,但我的 C 太生锈了,无法发现任何有用的东西。

不过,该模块已经发生了很多变化,因此很可能已经报告并修复了一个错误。您甚至还没有使用 5.8 的最后一个版本——那里有一个 5.8.9,其中提到了对 AIX 兼容性和 File::Glob 的更新。

我会通过安装 local::lib 来测试它如果你还没有,然后也许 cpanm并尝试更新 File::Glob - 看看会发生什么。您可能需要从例如手动下载文件。 here

如果这解决了问题,那么您可以将更新部署到所需的系统,或者您必须重新实现所需的 glob() 位。这将取决于你的模式有多复杂。

如果它不能解决问题,那么至少您可以将一些 printf 粘贴到代码中并查看它在做什么。

希望有人会在我单击“发布您的答案”后大约 5 分钟发布一个真正的答案并使其变得多余。

关于Perl:文件大于 2 GB 的 glob 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13413418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com