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, find
können Sie die Dateien, die mit der Erweiterung enden, .gz
wie 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 ls
die Ausgabe auch folgendermaßen filtern:
$ ls *FAIL* | grep -v '.gz'
FAIL
Es ist jedoch im Allgemeinen ratsam, ls
die Ausgabe nicht zu analysieren, da sie aufgrund ihrer Struktur nicht dazu geeignet ist.