So komprimieren Sie alle Dateien in allen Unterverzeichnissen in eine komprimierte Datei in bash

201

Mögliches Duplizieren:
Eine Reihe von Verzeichnissen komprimieren und eine tar-komprimierte Datei erstellen

In diesem Beitrag wird beschrieben, wie Sie jede Datei einzeln innerhalb einer Verzeichnisstruktur gzipen. Ich muss jedoch etwas anderes machen. Ich muss eine große gzip-Datei für alle Dateien in einem bestimmten Verzeichnis erstellen. Ich muss auch in der Lage sein, den Ausgabedateinamen für die komprimierte Datei (z. B. files.gz) anzugeben und die alte komprimierte Dateidatei zu überschreiben, falls bereits eine vorhanden ist.

Doug
quelle
gzipkomprimiert von Natur aus nur eine einzige Datei. Verwenden Sie, um mehrere Dateien für das anschließende Zippen in eine Datei zu legen tar.
Thomas

Antworten:

387
tar -zcvf compressFileName.tar.gz folderToCompress

Alles in folderToCompress wird in compressFileName gespeichert

Bearbeiten: Nach Überprüfung und Kommentaren wurde mir klar, dass Leute ohne eine Erweiterung mit compressFileName verwechselt werden können. Wenn Sie möchten, können Sie die Erweiterung .tar.gz (wie vorgeschlagen) mit dem komprimierten Dateinamen verwenden

amitchhajer
quelle
2
Vielen Dank. Wird dies alles unter "folderToCompress" (dh rekursiv) komprimieren?
Doug
2
Alles in folderToCompress wird an compressFileName
amitchhajer
80
Sie werden wahrscheinlich wählen wollen, compressFileNamedamit es die .tar.gzErweiterung enthält, oder Sie werden alle anderen verrückt machen.
Zeichnen
9
Dies funktioniert auch für eine beliebige Anzahl von Verzeichnissen, z. B. tar -zcvf two-dirs.tar.gz dir-one dir-twowird ein Archiv mit zwei Verzeichnissen erstellt.
Zoltán
5
Funktioniert auch mit *, um alles im aktuellen tar -zcvf all.tar.gz *
61

Es gibt viele Komprimierungsmethoden, die rekursiv über die Befehlszeile funktionieren, und es ist gut zu wissen, wer das Endpublikum ist.

dh wenn es an jemanden gesendet werden soll, der Windows ausführt, ist zip wahrscheinlich am besten:

zip -r file.zip folder_to_zip

unzip filenname.zip

Für andere Linux-Benutzer oder Ihr Selbst ist tar großartig

tar -cvzf filename.tar.gz folder

tar -cvjf filename.tar.bz2 folder  # even more compression

#change the -c to -x to above to extract

Man muss vorsichtig mit Teer sein und wie die Dinge geteert / extrahiert werden, zum Beispiel wenn ich renne

cd ~
tar -cvzf passwd.tar.gz /etc/passwd
tar: Removing leading `/' from member names
/etc/passwd


pwd

/ home / myusername

tar -xvzf passwd.tar.gz

Dadurch wird / home / myusername / etc / passwd erstellt

unsicher, ob alle Versionen von tar dies tun:

 Removing leading `/' from member names
VH
quelle
18

@amitchhajers Beitrag funktioniert für GNU tar. Wenn jemand diesen Beitrag findet und benötigt, um auf einem NON- GNUSystem zu arbeiten, kann er Folgendes tun:

tar cvf - folderToCompress | gzip > compressFileName

So erweitern Sie das Archiv:

zcat compressFileName | tar xvf -
Jeremy J Starcher
quelle
2
Diese Lösung ist nicht nur portabel, sondern auch nützlich, wenn Sie Argumente an gzip übergeben möchten (z. B. --test oder --best), da afaik selbst GNU tar keine Möglichkeit bietet, Argumente an gzip zu senden.
Timothy Woods
Dies ist vielseitig, da Sie auch andere Kompressoren verwenden können. Zum Beispiel, pigzwas schneller ist, da es die CPU besser nutzen kann (eine Multithread-Implementierung von zip).
Ortwin Angermeier