首页 > 解决方案 > 如何使用 perl 获取子目录中存在的文件名数组(不使用 File::Find)

问题描述

我正在尝试获取子目录中存在的文件的名称。此外,我想获取数组的大小并在单个文件中搜索文本

#!/usr/bin/perl

$dir = $ARGV[0];
my @filesList;
opendir(DIR, $dir) || die "Unable to open the directory";
@contents=readdir(DIR);
foreach $listitem ( @contents )
{
    if ( -d $listitem )
    {
        opendir(DIR,$listitem);
        @c1=readdir(DIR);
        foreach  $firstlevel(@c1)  # first level directory structure
        {
            if (-d $firstlevel) {
                opendir(DIR,$firstlevel);
                @c2=readdir(DIR);
                foreach  $secondlevel(@c2) {  #second level directory structure
                    push(@filesList, $secondlevel);
                }
            } else {
                 # push(@filesList, $firstlevel);
            }
        }
        #push(@filesList, $listitem);   
    } else {
        push(@filesList, $listitem);
    }
}
$size = @filesList;
print "array size : $size";
foreach $file(@filesList)
{
    print "$file"; 
}
close(DIR);

所有这一切我想在不使用的情况下工作Find::Find,我得到了错误use File::Find

另外,我怎样才能得到数组的大小

标签: perl

解决方案


scalar是获得数组大小所需要的,尽管您可以省略标量并仍然获得看起来已经拥有的元素数量。如果不是这个,您必须澄清“数组大小”的确切含义。更简洁的方法是使用 File::Find,但如果您只是想要快速的东西,您可以使用反引号进行系统调用来查找或任何其他系统命令:

use strict;
use warnings;

my @files = `find $ARGV[0] -type f`;
my $size = scalar(@files);
print "Number of files = $size\n";
foreach my $file(@files) {
    print "$file";
}

推荐阅读