如何使用Perl在目录中搜索特定文件?

时间:2010-09-08 11:35:31

标签: perl

我在目录中有一个文件,我想一次从目录中选择一个特定的文件。

代码如下:

$xml_file_name = <STDIN>;
chomp ($xml_file_name);

@o = file_search($xml_file_name);
print "file::@o\n";

sub file_search
{
    opendir (DIR, "/home/sait11/Desktop/test/Test cases") or die "Failed to open directory\n";
    @dirs_found = grep { /$xml_file_name/ } readdir DIR;
    closedir (DIR);
#   print "dir ::@dirs_found\n";
    return @dirs_found;
}

我输入要作为sample.xml返回的文件名。但是在@dirs_found变量中,所有以's'开头的文件名都会被存储。

如何一次找出确切的一个文件?

2 个答案:

答案 0 :(得分:8)

要查找特定文件,只需打开该文件,或对其运行文件测试:

my $file = "/home/sait11/Desktop/test/Test cases/$xml_file_name";

print "$file found\n" if -f $file;

运行代码,它似乎确实有效。如果输入模式,则它会正确地从目标目录中选择与您键入的Perl正则表达式匹配的文件名。您要查找的是什么名称?

如果您将grep修改为:

my @dirs_found = grep { /^$xml_file_name$/ } readdir DIR;

然后它将排除正则表达式与整个名称不匹配的值。另一方面,当你这样做时,你会放弃一些灵活性。

答案 1 :(得分:-4)

得到答案,我必须提供整个文件名,以便它只匹配该特定文件。