Auf * nix-Systemen habe ich Folgendes mit guten Ergebnissen verwendet.
sub filesExist { return scalar (my @x = `ls -1a 2> /dev/null "$_[0]"`) }
Es antwortet mit der Anzahl der gefundenen Übereinstimmungen, oder 0, wenn keine gefunden wurde. Es macht es leicht in 'Wenn'-Bedingungen wie:
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";
}
Genau welche Muster Sie verwenden könnten würde bestimmt werden, was Ihre Shell unterstützt. Aber die meisten Shells unterstützen die Verwendung von '*' und '?' - und sie meinen dasselbe überall, wo ich gesehen habe. Wenn Sie den Aufruf der Funktion "Skalar" entfernen, werden natürlich die Übereinstimmungen zurückgegeben - nützlich, um diese variablen Dateinamen zu finden.
Nur um abzuschließen, können Sie 'foreach (glob (" *. File ")) {something}' auch tun ... – dawg
Aber ich bin nicht in der Lage, regexp da drin zu setzen. Kann ich reguläre Ausdrücke verwenden? – Jean
@alertjean Nein, Sie müssen das Verzeichnis öffnen und die Dateinamen manuell mit einem regulären Ausdruck scannen. 'glob' unterstützt nur die traditionellen [Shell-Wildcards] (http://www.tuxfiles.org/linuxhelp/wildcards.html). – meagar