检查目录中是否存在具有给定扩展名的文件

时间:2013-07-30 07:00:55

标签: perl

我不想指定文件名,只想使用扩展名。

喜欢

if(-e "./dir/*.c"){
}

我想检查./dir目录中是否存在任何.c文件。 可能吗 ? 由于我没有得到正确的结果,如果有人知道在这种情况下使用这个-e开关的任何替代或正确方法,请帮助我。

2 个答案:

答案 0 :(得分:5)

这可能有所帮助:

my @list = <*.c>;

if (scalar @list == 0) {
  print "No .c File exist.";
} else {
  print "Existing C files are\n", join (", ", @list), "\n";
}

您可以使用<*.c>opendir函数,而不是通过生成子shell,而不是使用<{1}}扩展文件列表:

readdir

其中opendir DIR, $path; my @list = readdir DIR; closedir (DIR); my $flag = 0; foreach $file (@list) { if ($file =~ m/^.*\.c$/i) { print "$file\n"; $flag = 1; } } if ($flag == 0) { print "No .c file exists\n"; } 是一个表示目录路径的变量。

答案 1 :(得分:1)

您可能对File::Find模块感兴趣,这是Perl版本5中的核心模块。它是递归的,可能是也可能不是您想要的。

use strict;
use warnings;
use File::Find;
use Data::Dumper;   # for output only

my @found;
find(sub { /\.c$/i && push @found, $File::Find::name; }, 'dir');
print Dumper \@found;

$File::Find::name包含文件的完整路径。正则表达式与包含基本文件名的$_匹配。请注意,find()子例程的第一个参数是匿名子,即代码块。

如果要检查空输出,则在标量上下文中使用数组将返回其大小。零(假)大小表示未找到匹配项。

if (@found) {
    print "Found files: @found\n";
} else { ...}