Ich versuche, einen Ordner unter Unix zu komprimieren. Kann dies mit dem Befehl gzip erfolgen?

Kommentare

  • Sie können gzip -r myfolder verwenden, um Dateien rekursiv zu komprimieren. Auf die gleiche Weise können Sie Dateien mit gunzip -r myfolder entpackt Dateien rekursiv. Für weitere Informationen man gzip
  • Verwenden Sie tar; es werden Optionen für die Komprimierung unterstützt gzip ist als Ergänzung zu tar und nicht als Ersatz konzipiert.
  • Beachten Sie, dass @ val0x00ff ‚ ist mit ziemlicher Sicherheit nicht das, was Sie erreichen möchten.
  • @Shadur, dass ‚ der Grund ist, warum ich ihn gepostet habe comment, da dies nicht die Antwort auf seine Frage war.
  • Demostrieren, was @Shadur bedeutet. Gegebene Dateien 1 und 2 unter Ordner playground . gzip -r ./playground gibt Ihnen 1.gz und 2.gz (und nicht mehr 1 und 2 Dateien) unter Ordner playground, KEINE komprimierte Datei mit allem darin.

Antwort

Nein.

Im Gegensatz zu zip fungiert gzip nur als Komprimierungsalgorithmus .

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

In Um ein Verzeichnis zu „zippen“, wäre der richtige Befehl

tar -zcvf archive.tar.gz directory/ 

Dies teilt tar mit

  • komprimieren Sie es mit dem z (gzip) -Algorithmus

  • c (erstellen) Sie ein Archiv aus den Dateien in directory (tar ist standardmäßig rekursiv)

  • v (ausführlich) Liste (on / dev / stderr Es wirkt sich also nicht auf Piped-Befehle aus.) Alle Dateien, die dem Archiv hinzugefügt werden.

  • und speichern Sie die Ausgabe als f (Datei) mit dem Namen archive.tar.gz

Der Befehl tar bietet gzip Unterstützung (über das Flag -z) . Der Befehl gzip / lib ist vollständig getrennt. Der obige Befehl ist praktisch der gleiche wie

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

Zum Dekomprimieren und Entpacken des Archivs in das aktuelle Verzeichnis würden Sie

Dieser Befehl ist praktisch der gleiche wie

gunzip < archive.tar.gz | tar -xv 

tar hat viele, viele, viele andere Optionen und Verwendungen auch; Ich empfehle von Herzen, irgendwann die Manpage durchzulesen.

Kommentare

  • Nur um die Dinge noch deutlicher zu machen, ist dies genau gleichbedeutend mit tar -cv directory | gzip > archive.tar.gz. Das resultierende Archiv kann dann mit tar -zxvf oder sogar zcat file.tar.gz | tar -xv extrahiert werden. Da der Teer völlig unabhängig von gzip ist, enthält der Befehl tar der Einfachheit halber nur die Unterstützung von gzip.
  • Ich habe für eine ganze Weile. Beachten Sie Folgendes: Wenn Sie Windows (7-zip muss angegeben werden) zum Entpacken einer *.tar.gz -Datei verwenden, dauert es zwei Runden. Eine zum Entpacken der Datei *.tar.gz in eine *.tar -Datei, die nächste zum Entpacken dieser TAR-Datei in den ursprünglichen Inhalt. Dies erhöht die gesamte Entpackzeit, insbesondere bei großen Dateien (z. B. Protokollen).
  • Hat die Benennung des Archivs Auswirkungen auf die Maschine? Ich weiß, es wäre schön, die Leute über den Algorithmus zu informieren, der ursprünglich zum Zippen verwendet wurde (daher .gz), aber ansonsten ist es tatsächlich wichtig, wie Sie das Archiv benennen?
  • @hello_there_andy Es macht nein Unterschied zu den meisten Unixen, aber Windows (und die Vervollständigung von Smart Tabs unter Linux) machen Annahmen basierend auf der Dateinamenerweiterung.
  • @vadimkotov Dies könnte das sein, was Sie ‚ sind Suchen nach: superuser.com/questions/168749/…

Antwort

Der Befehl gzip komprimiert ein Verzeichnis bei Verwendung von -r Schalter. Vielmehr wird diese Verzeichnisstruktur durchlaufen und jede gefundene Datei in eine separate Datei komprimiert.

Beispiel

vor

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

Führen Sie jetzt das gzip Befehl

$ 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, möchten Sie wahrscheinlich den Befehl tar verwenden und dann das Ergebnis komprimieren .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 

Daraus ergibt sich die folgende Einzeldatei:

$ 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 

Antwort

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

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

Kommentare

  • @JeffSchaller: Dies ist eine Antwort. Es ist ein schwerwiegender Fehler (glaube ich), aber es ist eindeutig eine Antwort.
  • @ize: Ich ‚ bin mir ziemlich sicher, dass der von Ihnen gepostete Befehl dies nicht tut. Verwenden Sie in der Tat gzip.
  • Punkte für die Verwendung von zip wie die gestellte Frage. Höchstwahrscheinlich hätte der Autor gerne gewusst, dass ‚ möglich ist, DAS GENAUE ZU TUN Das Gleiche wie früher an Fenstern. Es ist traurig, dass die meisten Leute ‚ nicht so weit denken möchten.
  • Es ist schwierig, wenn in der Frage angegeben wird … „using gzip“.
  • Ich ‚ stimme dieser Antwort zu, da ich denke, dass das Produkt (eine Zip-Datei) wahrscheinlich wichtiger ist als die Methode (mit gzip).

Antwort

Ich habe diese beiden Befehle per Skript ausgeführt:

gzipdir:

#!/bin/bash if [[ -d $1 ]]; then cd "$1" cd .. base=$(basename "$1") tar -zcvf "$base.tgz" "$base" if [[ $? == 0 && -f "$base.tgz" ]]; then rm -rf "$base" fi else echo "Usage: $0 DIRECTORY"; fi 

ungzipdir:

#!/bin/bash if [[ -f $1 ]]; then base=${1%%.*} file=$(basename "$1"); dir=$(basename "$base"); if [[ ! -d $base ]]; then mkdir "$base" cd "$base" cd .. tar -xvf "$file" if [[ $? == 0 && -d "$dir" ]]; then rm -f "$file" fi else echo "Directory $base already exists. Nothing done." fi else echo "Usage: $0 file.tgz"; fi 

(!!!) Bitte vor Gebrauch testen (da es ein „rm -f“ gibt, das möglicherweise wichtige Daten entfernen kann, wenn es auf ungewöhnliche Weise verwendet wird).

Verwendung:

cd /home/; gzipdir MyDirectory oder gzipdir /home/MyDirectory

Erstellt /home/MyDirectory.tgz und entfernt MyDirectory bei Erfolg (!!!).

ungzipdir /home/MyDirectory.tgz

Erstellt / home / MyDirectory und entfernt /home/MyDirectory.tgz bei Erfolg.

Kommentare

  • So komprimieren Sie ALLE Dateien in einem Verzeichnis: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (Vorsicht mit dem Befehl find, testen Sie ihn mit -exec echo {} zuerst und stellen Sie sicher, dass Sie ‚ ‚ ./, wodurch das PARENT-Verzeichnis komprimiert wird und möglicherweise Ihr gesamtes Home-Verzeichnis beschädigt wird.

Antwort

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

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

Kommentare

  • Ich benutze es auch oft (und pixz), aber funktioniert es, wenn Pipes und Ausgabeverleitung ins Spiel kommen?

Antwort

Wenn Ihr Linux-Tar die Option -z nicht unterstützt Sie können Folgendes verwenden:

tar -cvf - dir | gzip > dir.tar.gz 

Antwort

Der Vollständigkeit halber, wenn Sie möchte die Datei im bac tarieren kground, benutze @Shadurs Antwort und füge am Ende & hinzu:

tar -zcvf archive.tar.gz directory/ & 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.