Perl,如何阅读子文件夹输出

时间:2015-10-01 01:15:00

标签: perl

我正在编写一个脚本来读取目录中多个子文件夹的内容。 最近我需要读取多个子文件夹内的文件夹内容。 想问一下如何编写代码来读取多个子文件夹中的那些文件夹。

这是新的条件
多个子文件夹 - >本地文件夹 - > 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);

 ...... 

2 个答案:

答案 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的答案。这是最佳方法。