Sie können einfach Folgendes tun:
gzip *
gzip sagt Ihnen, dass es die Dateien überspringt, die bereits eine .gz
Endung haben.
Wenn diese Nachricht in die Quere kommt, können Sie Folgendes verwenden:
gzip -q *
Was Sie versucht haben, hat nicht funktioniert, da gzip
die Dateinamen der zu komprimierenden Dateien nicht von stdin gelesen wurden. Dazu müssten Sie Folgendes verwenden:
ls | grep -v gz | xargs gzip
Sie schließen Dateien mit dem Muster gz
nicht nur am Ende des Dateinamens aus.¹ Beachten Sie außerdem, dass das Parsen der Ausgabe ls
gefährlich ist, wenn Dateinamen mit Leerzeichen, Zeilenumbrüchen usw. betroffen sind.
Eine sauberere Lösung, die nicht darauf angewiesen ist, gzip
Dateien mit einer .gz
Endung zu überspringen , besteht darin, dass auch nicht komprimierte Dateien in Unterverzeichnissen verarbeitet werden:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Wie bereits erwähnt izkata
: Es .gz
würde nicht funktionieren, dies alleine zu verbessern. Sie müssten grep -vF .gz
oder verwenden grep -v '\.gz$'
. Damit bleibt die Gefahr der Verarbeitung ls
der Ausgabe bestehen
$
es einfach, damit es klarer wird. Und du bist dem.
sowieso nicht entkommen , also werden nur Dateien ausgeschlossen, die mitgz
(da sie "keine Zeichen vorgz
" haben) beginnen$
ausgeschlossen werden (-v
), deren Namen aus drei oder mehr Zeichen bestehen, einschließlich eines beliebigen Zeichens, gefolgt von "gz", an einer beliebigen Stelle im Dateinamen. Es enthält also Dateien mit Namen, die mit "gz" beginnen.gz
irgendwo im Namen enthalten sind (außer am Anfang). Also ist es besser, es trotzdem zu verankern. Nachdem es nicht benutzt wurde$
, hatte es den Anschein, als wüssten Sie nicht, was es.
in einem regulären Ausdruck bedeutet, daher der Rest des verwirrenden Kommentars.