我正在编写一个脚本来读取目录中多个子文件夹的内容。 最近我需要读取多个子文件夹内的文件夹内容。 想问一下如何编写代码来读取多个子文件夹中的那些文件夹。
这是新的条件
多个子文件夹 - >本地文件夹 - > fileAAA.csv
如何在多个子文件夹的本地文件夹中读取此文件AAA?
目前我写的代码处于这种状态,效果很好
多个子文件夹 - > fileAAA.csv
能够从多个子文件夹中读取fileAAA
以下是我用来阅读的代码 多个子文件夹 - > fileAAA.csv
my ( $par_dir, $sub_dir );
opendir( $par_dir, "$parent" );
while ( my $sub_folders = readdir($par_dir) ) {
next if ( $sub_folders =~ /^..?$/ ); # skip . and ..
my $path = $parent . '/' . $sub_folders;
next unless ( -d $path ); # skip anything that isn't a directory
opendir( $sub_dir, $path );
while ( my $file = readdir($sub_dir) ) {
next unless $file =~ /\.csv?$/i;
my $full_path = $path . '/' . $file;
print_file_names($full_path);
}
closedir($sub_dir);
$flag = 0;
}
closedir($par_dir);
......
答案 0 :(得分:2)
你应该看the File::Find
module哪些已经存在的所有内容都可以进行这样的搜索,并且已经考虑了所有角落案例
我在平板电脑上写了这个,当时我无法提供示例代码来支持它。我相信这会做你想要的,只是找到父目录下任何级别的所有CSV文件
use strict;
use warnings;
use File::Find qw/ find /;
STDOUT->autoflush;
my $parent = '/Multiple Sub-folder';
find(sub {
return unless -f and /\.csv$/i;
print_file_names($File::Find::name);
}, $parent);
sub print_file_names {
my ($fn) = @_;
print $fn, "\n";
}
答案 1 :(得分:0)
不使用moudle试试这个
您可以尝试使用glob代替opendir
进行子目录搜索。
在下面的脚本中,我为连续搜索创建了一个子程序。
当满足elsif条件时,目录的路径将转到find
子程序,然后它将进行搜索,依此类推。
my $v = "/Multiple Sub-folder";
find($v);
sub find{
my ($s) = @_;
foreach my $ma (glob "$s/*")
{
if(-f $ma)
{
if($ma =~m/.csv$/) # Here search for csv files.
{
print "$ma\n";
}
}
elsif(-d $ma)
{
find("$ma")
}
}
}
但您可以使用File::Find
模块搜索目录中的文件作为Borodin
的答案。这是最佳方法。