Mehrere Muster mit ls abgleichen

Mehrere Muster mit ls abgleichen

Ich möchte eine Liste der Fehlerprotokolle im aktuellen Verzeichnis zur Verwendung in einem externen Skript erhalten. Die Protokolle werden durch das Muster FAIL im Dateinamen bestimmt. Daher verwende ich FAIL*, um meine Skriptdateien zum Öffnen und Verarbeiten zu füttern. Für jede FAIL-Datei gibt es jedoch zwei Typen: eine komprimierte und eine unkomprimierte Datei. Ich möchte nur die unkomprimierte Datei öffnen.

Ist es möglich, FAIL* zu verketten, aber nicht, wenn *.gz/bz2/was auch immer existiert?

Antwort1

Sie können das Vorhandensein eines regulären Ausdrucks für diese Erweiterungen testen:

for file in *FAIL*; do [[ ! $file =~ .(bz2|gz) ]] && printf "%s\n" "$file"; done

Einfügen einer obligatorischen Warnung übernicht parsenls...

Antwort2

Wenn Sie den Befehl verwenden, findkönnen Sie die Dateien, die mit der Erweiterung enden, .gzwie folgt weglassen:

$ ls -l
total 0
-rw-rw-r--. 1 saml saml 0 Oct 15 22:42 FAIL
-rw-rw-r--. 1 saml saml 0 Oct 15 22:42 FAIL.gz

$ find . -name "*FAIL*" ! -name "*.gz"
./FAIL

Sie können lsdie Ausgabe auch folgendermaßen filtern:

$ ls *FAIL* | grep -v '.gz'
FAIL

Es ist jedoch im Allgemeinen ratsam, lsdie Ausgabe nicht zu analysieren, da sie aufgrund ihrer Struktur nicht dazu geeignet ist.

verwandte Informationen