GNU/Linux >> LINUX-Kenntnisse >  >> Linux

gzip alle Dateien ohne sie zu löschen

find . -type f | \
while read -r x
do
  gzip -c "$x" > "$x.gz"
done

Der -c verschiebt das Ergebnis nach stdout und behält das Original allein. Der Nachteil ist, dass Sie die Dateien selbst finden müssen. Für anspruchsvolleres Traversieren können Sie find(1) verwenden , jedoch wie oben:. sucht ab dem aktuellen Verzeichnis und -type f gibt den Namen jeder regulären Datei zurück.


find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;

Sie können es leicht umstellen, um das einzuschließen, was Sie komprimieren möchten ( -name '*.txt -or -name '*.html usw.) statt wie jetzt, mit Ausnahme einiger Dateien (bereits komprimierte, Sicherungs- und temporäre Dateien).

Behandelt auch Leerzeichen im Dateinamen problemlos.

Ändern Sie gzip bis echo gzip zum Prüfen. Oder überspringen Sie den Teil -exec ganz.

Bearbeiten: Oh, ich habe vergessen zu erwähnen, dass dies nicht prüft, ob <target>.gz ist bereits vorhanden. Dies kann ein Problem sein oder auch nicht.

Edit2: Ok, hier kommen wir zu etwas, das nach vorhandenen Dateien sucht. Falls das gewollt sein darf. Verzeihen Sie die Einseitigkeit.

while read file; do if [ ! -f "$file.gz" ]; then echo "Compressing $file"; gzip -c "$file" > "$file.gz"; else echo "Not overwriting $file.gz";  fi  done < <(find . -type f -not \( -name '*.gz' -or -name '*[~#]' \))

Mein find -foo ist vielleicht nicht das, was es sein könnte, es kann durchaus möglich sein, direkt in find zu springen.


gzip -k Möglichkeit

gzip 1.6 (Juni 2013) hat den -k, --keep hinzugefügt Option, also können Sie jetzt:

gzip -kr .

und Ihre Originaldateien werden nicht gelöscht.

Gefunden unter:https://unix.stackexchange.com/questions/46786/how-to-tell-gzip-to-keep-original-file


Linux
  1. Liste aller Dateien nach Maske im Terminal abrufen?

  2. So finden Sie alle Sparse-Dateien in Linux

  3. Wie man alle oder bestimmte Dateien in Linux gzippt

  4. So erhalten Sie alle Dateien, die eine bestimmte Größe überschreiten, und löschen sie

  5. Dateien finden und taren (mit Leerzeichen)

So finden Sie doppelte Dateien in Linux und entfernen sie

Alle Dateien finden, deren Name eine Zeichenfolge enthält

Finden Sie mehrere Dateien und benennen Sie sie in Linux um

Finden Sie alle Dateien, die älter als eine Minute sind

Wie finde ich alle fest verlinkten Dateien in einem Dateisystem?

Finden Sie alle doppelten Dateien nach MD5-Hash