Kann ich einen ganzen Ordner mit gzip komprimieren?

Kann ich einen ganzen Ordner mit gzip komprimieren?

Ich versuche, einen Ordner unter Unix zu komprimieren. Ist das mit dem Befehl gzip möglich?

Antwort1

NEIN.

Im Gegensatz zipzu gzipfungiert als Komprimierungsalgorithmusnur.

Aus verschiedenen Gründen, von denen einige auf die Ära der Bandlaufwerke zurückgehen, verwendet Unix ein Programm namens tarzum Archivieren von Daten, die dann mit einem Komprimierungsprogramm wie gzip, bzip2, 7zip, usw. komprimiert werden können.

Um ein Verzeichnis zu "zippen", wäre der richtige Befehl

tar -zcvf archive.tar.gz directory/ 

Dies wird tarIhnen sagen,

  • komprimieren Sie es mit demz(gzip) Algorithmus

  • C(erstellen) Sie ein Archiv aus den Dateien indirectory( tarist standardmäßig rekursiv)

  • gegen(ausführlich) Listet (auf /dev/stderr, damit weitergeleitete Befehle nicht beeinträchtigt werden) alle Dateien auf, die es zum Archiv hinzufügt.

  • und speichern Sie die Ausgabe alsF(Datei) mit dem Namenarchive.tar.gz

Der tarBefehl bietet gzipUnterstützung (über die -zFlagge) nur zu Ihrer Bequemlichkeit. Der gzipBefehl/die Bibliothek ist vollständig getrennt. Der obige Befehl ist praktisch derselbe wie

tar -cv directory | gzip > archive.tar.gz

Zum Dekomprimieren und Entpacken des Archivs in das aktuelle Verzeichnis verwenden Sie

tar -zxvf archive.tar.gz

Dieser Befehl ist praktisch dasselbe wie

gunzip < archive.tar.gz | tar -xv

tarhat außerdem viele, viele, VIELE andere Optionen und Einsatzmöglichkeiten; ich empfehle wärmstens, irgendwann einmal die Manpage durchzulesen.

Antwort2

Der gzipBefehl komprimiert ein Verzeichnis nicht rekursiv in eine einzelne ZIP-Datei, wenn der -rSchalter verwendet wird. Vielmehr durchläuft er die Verzeichnisstruktur und komprimiert jede gefundene Datei in eine separate Datei.

Beispiel

Vor

$ tree dir1/
dir1/
|-- dir11
|   |-- file11
|   |-- file12
|   `-- file13
|-- file1
|-- file2
`-- file3

Führen Sie nun den gzipBefehl aus

$ gzip -r dir1

nach

$ tree dir1/
dir1/
|-- dir11
|   |-- file11.gz
|   |-- file12.gz
|   `-- file13.gz
|-- file1.gz
|-- file2.gz
`-- file3.gz

Wenn Sie die Verzeichnisstruktur lieber komprimieren möchten, verwenden Sie wahrscheinlich den tarBefehl und komprimieren Sie dann die resultierende .tarDatei.

$ tar zcvf dir1.tar.gz dir1/

Beispiel

$ tar zcvf dir1.tar.gz dir1/
dir1/
dir1/file1
dir1/file2
dir1/dir11/
dir1/dir11/file11.gz
dir1/dir11/file12.gz
dir1/dir11/file13.gz
dir1/file3

Das Ergebnis ist die folgende einzelne Datei:

$ ls -l | grep tar
-rw-rw-r-- 1 saml saml  271 Oct  1 08:07 dir1.tar.gz

Sie können den Inhalt bestätigen:

$ tar ztvf dir1.tar.gz 
drwxrwxr-x saml/saml         0 2013-10-01 08:05 dir1/
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file1
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file2
drwxrwxr-x saml/saml         0 2013-10-01 08:04 dir1/dir11/
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file11.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file12.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file13.gz
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file3

Antwort3

Die Antwort auf die Frage „Kann ich einen ganzen Ordner mit gzip [unter Linux] komprimieren?“ lautet, dass Sie das zipProgramm anstelle von gzip mit der folgenden Syntax verwenden können:

zip -r <zip file name> <folder to zip>

Antwort4

Ich empfehle die Verwendung von pigz(Parallele Implementierung von GZip)

tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz

verwandte Informationen