Perlでこのようなことをすることはできますか?ファイル名の意味パターンが一致し、存在するかどうかを確認します。
if(-e "*.file")
{
#Do something
}
存在するファイルをリストするようにシステムに要求するという、より長い解決策を知っています。それをファイルとして読み取り、ファイルが存在するかどうかを推測します。
glob
を使用して、パターンに一致するすべてのファイルの配列を返すことができます。
@files = glob("*.file");
foreach (@files) {
# do something
}
パターンに一致するファイルが存在するかどうかを単に知りたい場合は、割り当てをスキップできます。
if (glob("*.file")) {
# At least one file matches "*.file"
}
Windowsでは、バックスラッシュを区切るWindowsパスがPerlのglobで機能していないように見えるため、 File :: Glob :: Windows を使用する必要がありました。
* nixシステムでは、以下を使用して良好な結果が得られました。
sub filesExist { return scalar ( my @x = `ls -1a 2> /dev/null "$_[0]"` ) }
見つかった一致の数、または一致しない場合は0で応答します。次のような「if」条件で簡単に使用できるようにします。
if( !filesExist( "/foo/var/not*there.log" ) &&
!filesExist( "/foo/var/*/*.log" ) &&
!filesExist( "/foo/?ar/notthereeither.log" ) )
{
print "No matches!\n";
} else {
print "Matches found!\n";
}
使用できる正確なパターンは、シェルがサポートするものによって決まります。ただし、ほとんどのシェルは「*」と「?」の使用をサポートしています。 -そしてそれらは私が見たどこでも同じことを意味します。もちろん、「scalar」関数の呼び出しを削除すると、一致が返されます。これらの変数ファイル名を見つけるのに役立ちます。