Schleifen oder mehr als find
sind nicht erforderlich und gzip
:
find . -type f ! -name '*.gz' -exec gzip "{}" \;
Dies findet alle regulären Dateien in und unterhalb des aktuellen Verzeichnisses, deren Namen nicht mit .gz
enden Erweiterung (d. h. alle Dateien, die noch nicht komprimiert sind). Es ruft gzip
auf auf jede Datei einzeln.
Bearbeiten, basierend auf dem Kommentar von user unknown
:
Die geschweiften Klammern ({}
) werden durch den Dateinamen ersetzt, der direkt als einzelnes Wort an den Befehl nach -exec
übergeben wird wie Sie hier sehen können:
$ touch foo
$ touch "bar baz"
$ touch xyzzy
$ find . -exec echo {} \;
./foo
./bar baz
./xyzzy
find . -type f | while read file; do gzip "$file"; done
Ich bevorzuge gzip -r ./
was dasselbe tut, aber kürzer ist.