我不想指定文件名,只想使用擴展名。檢查目錄中是否存在具有給定擴展名的文件
像
if(-e "./dir/*.c"){
}
我要檢查是否有任何.c文件中./dir目錄中。 這可能嗎? 由於我沒有得到正確的結果,如果有人知道在這種情況下使用此-e開關的任何替代或正確的方式,請幫助我。
我不想指定文件名,只想使用擴展名。檢查目錄中是否存在具有給定擴展名的文件
像
if(-e "./dir/*.c"){
}
我要檢查是否有任何.c文件中./dir目錄中。 這可能嗎? 由於我沒有得到正確的結果,如果有人知道在這種情況下使用此-e開關的任何替代或正確的方式,請幫助我。
這可能會幫助:
my @list = <*.c>;
if (scalar @list == 0) {
print "No .c File exist.";
} else {
print "Existing C files are\n", join (", ", @list), "\n";
}
代替
產卵子shell通過
使用水珠<*.c>
,你也可以使用opendir
,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";
}
在哪裏$path
是一個指示目錄路徑的變量。
您可能會對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 { ...}
這不是開關,'-e'開關是一行程序使用的開關。這是完全不同的東西。你有什麼是[文件測試一元運算符](http://perldoc.perl.org/functions/-X.html)。 – TLP