Ich versuche, einen Ordner unter Unix zu komprimieren. Ist das mit dem Befehl gzip möglich?
Antwort1
NEIN.
Im Gegensatz zip
zu gzip
fungiert als Komprimierungsalgorithmusnur.
Aus verschiedenen Gründen, von denen einige auf die Ära der Bandlaufwerke zurückgehen, verwendet Unix ein Programm namens tar
zum 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 tar
Ihnen sagen,
komprimieren Sie es mit demz(gzip) Algorithmus
C(erstellen) Sie ein Archiv aus den Dateien in
directory
(tar
ist 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 Namen
archive.tar.gz
Der tar
Befehl bietet gzip
Unterstützung (über die -z
Flagge) nur zu Ihrer Bequemlichkeit. Der gzip
Befehl/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
tar
hat außerdem viele, viele, VIELE andere Optionen und Einsatzmöglichkeiten; ich empfehle wärmstens, irgendwann einmal die Manpage durchzulesen.
Antwort2
Der gzip
Befehl komprimiert ein Verzeichnis nicht rekursiv in eine einzelne ZIP-Datei, wenn der -r
Schalter 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 gzip
Befehl 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 tar
Befehl und komprimieren Sie dann die resultierende .tar
Datei.
$ 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 zip
Programm 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