ワイルドカードを使用したパスが指定されたファイル名のリストを取得しようとしています。
my $path = "/foo/bar/*/*.txt";
my @file_list = glob($path);
foreach $current_file (@file_list) {
print "\n- $current_file";
}
ほとんどの場合、これは完全に機能しますが、/foo/bar/* サブパスのどこかに 2GB を超えるファイルがある場合、glob はエラーや警告なしで空の配列を返します。
ファイル file を削除するか、次のような文字/ブラケット シーケンスを追加すると:
my $path = "/foo/bar/*[0-9]/*.txt";
また
my $path = "/foo/bar/*1/*.txt";
その後、グロブは再び機能します。
アップデート:
例を次に示します (ビジネス ポリシーの問題で、パス名をマスクする必要がありました)。
[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/ / " の代わりに "/foo /bar/[acf] / " でグロビング)
[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 Aix 5.3 ファイルシステムはローカル jfs です。