15

Perlでこのようなことをすることはできますか?意味パターンがファイル名と一致し、存在するかどうかを確認します。

    if(-e "*.file")
    {
      #Do something
    }

存在するファイルをリストするようにシステムに要求するという、より長い解決策を知っています。それをファイルとして読み取り、ファイルが存在するかどうかを推測します。

4

3 に答える 3

34

globパターンに一致するすべてのファイルの配列を返すために使用できます。

@files = glob("*.file");

foreach (@files) {
    # do something
}

パターンに一致するファイルが存在するかどうかを知りたいだけの場合は、割り当てをスキップできます。

if (glob("*.file")) {
    # At least one file matches "*.file"
}
于 2010-10-18T22:20:43.370 に答える
1

Windowsでは、円記号を区切るWindowsパスがperlのglobで機能していないように見えるため、File :: Glob::Windowsを使用する必要がありました。

于 2018-07-18T06:53:15.907 に答える
0

* 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」関数の呼び出しを削除すると、一致が返されます。これらの変数ファイル名を見つけるのに役立ちます。

于 2013-09-30T18:32:11.760 に答える