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 mitgunzip -r myfolder
entpackt Dateien rekursiv. Für weitere Informationenman gzip
- Verwenden Sie
tar
; es werden Optionen für die Komprimierung unterstütztgzip
ist als Ergänzung zutar
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
und2
unter Ordnerplayground
.gzip -r ./playground
gibt Ihnen1.gz
und2.gz
(und nicht mehr1
und2
Dateien) unter Ordnerplayground
, 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 mittar -zxvf
oder sogarzcat file.tar.gz | tar -xv
extrahiert werden. Da der Teer völlig unabhängig von gzip ist, enthält der Befehltar
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/ &