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 gzipdie 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 gznicht nur am Ende des Dateinamens aus.¹ Beachten Sie außerdem, dass das Parsen der Ausgabe lsgefährlich ist, wenn Dateinamen mit Leerzeichen, Zeilenumbrüchen usw. betroffen sind.
Eine sauberere Lösung, die nicht darauf angewiesen ist, gzipDateien mit einer .gzEndung 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 .gzwürde nicht funktionieren, dies alleine zu verbessern. Sie müssten grep -vF .gzoder verwenden grep -v '\.gz$'. Damit bleibt die Gefahr der Verarbeitung lsder 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