我尝试了3种不同的方法来读取文件夹的内容,但它们都无法识别设置中的子目录。
奇怪的是,当我在本地重新创建文件夹结构时,会识别出该子目录,并且获得了所有3种解决方案都在寻找的文件。
此子目录与设置中文件夹中的其他文件一起动态创建。每次我都能读取所有创建的文件,但不能读取子目录及其内容。
我尝试了以下解决方案。
解决方案1:
use File::Find::Rule;
my $dir = '.';
my @subdirs = File::Find::Rule->directory->in($dir);
foreach (@subdirs) {
print "Dir --> $_ \n";
}
my @list = ("*.txt", "*.rex");
my @files = File::Find::Rule->file()->name(@list)->in(@subdirs);
foreach (@files) {
print "File --> $_ \n";
}
->不列出子目录。子目录包含我要查找的文件。所以我没有得到文件。
解决方案1的变体,它直接在文件夹中查找。
my $dir = getcwd();
my @types = ("*.txt","*.rex");
my @files = File::Find::Rule->file()->name(@types)->in("$dir");
print join("\n", @files);
这也不会打印文件,因为我看不到它会检查包含文件的子目录。
解决方案2:
my $cwd = getcwd();
sub find_rex {
my $f = $File::Find::name;
if ($f =~ /rex$/){
print "$f \n";
}
}
find (\&find_rex, $cwd);
解决方案3:
my @dirlist = '.'; # current dir, or command line arguments
foreach (@dirlist) { &check_dir($_); }
exit 0;
sub check_dir {
my $dir=shift;
print "Dir to search --> $dir \n";
warn "cannot traverse directory $dir\n"
unless (opendir D,$dir);
my @files = map {$dir.'/'.$_} grep {!m/^\.{1,2}$/} readdir D;
closedir D;
foreach (@files) {
if (-d $_) {
&check_dir($_);
}
elsif (-f $_) {
if ($_ =~ /\.rex$/ ){
print "Filename --> $_ \n";
}
}
}
}
所有这些解决方案都对我有效,以获取子目录的内容。我确保子目录在本地也具有相同的权限来测试我的代码。解决方案在本地可用,但在实际设置中不起作用。
我的想法已经用完了。当我在linux中列出子文件夹及其中的文件时,我能够看到它们。我也尝试过该glob,但它也不起作用。
更多详细信息:操作系统:Suse Linux,Bash / TCSH shell
谁能建议我可以尝试的东西。我不确定是否是readdir问题或其他问题。
有人遇到这种奇怪的问题。我可能做错了什么? 请建议我可以做什么?
无法识别的子文件夹是这样的 2018-07-29T22.57.52
此文件夹包含我要查找的文件,Perl模块的Find和readdir似乎没有检查该文件。
如果需要重新表达我的问题,请告诉我。