Sie können verwenden, gzip -r myfolderwelche Dateien rekursiv gzipen. Auf die gleiche Weise können Sie Dateien gunzip -r myfolder entpacken, wobei Dateien rekursiv entpackt werden. Für weitere Informationen man gzip
Valentin Bajrami
12
Verwenden Sie tar; Es unterstützt Optionen für die Komprimierung. gzipist als Ergänzung tarund nicht als Ersatz gedacht .
Devnull
13
Beachten Sie, dass der Vorschlag von @ val0x00ff mit ziemlicher Sicherheit nicht das ist, was Sie erreichen möchten.
Shadur
4
@ Shadur deshalb habe ich es gepostet, commentda das nicht die Antwort auf seine Frage war.
Valentin Bajrami
2
Demostrieren, was @Shadur bedeutet. Gegebene Dateien 1und 2unter Ordner playground. gzip -r ./playgroundSie erhalten 1.gzund 2.gz(und nicht mehr 1und 2Dateien) unter Ordner playground, NICHT eine gezippte Datei mit allem darin.
Jeff Xiao
Antworten:
660
Nein.
Im Gegensatz zu zip, gzipfungiert als Kompressionsalgorithmus nur .
Aus verschiedenen Gründen , von denen einige in der Zeit der Bandlaufwerke hören, verwendet Unix ein Programm namens tarDaten zu archivieren, die dann mit einem Komprimierungsprogramm komprimiert werden können , wie gzip, bzip2, 7zipusw.
Um ein Verzeichnis zu "zipen", wäre der richtige Befehl
tar -zcvf archive.tar.gz directory/
Dies wird sagen tarzu
komprimiere es mit dem z (gzip) Algorithmus
c (Erstellen) eines Archivs aus den Dateien in directory( tarist standardmäßig rekursiv)
v (ausführlich) Auflisten (unter / dev / stderr, damit Pipe-Befehle nicht betroffen sind) aller Dateien, die dem Archiv hinzugefügt werden.
und speichern Sie die Ausgabe als f (Datei) mit dem Namenarchive.tar.gz
Der tarBefehl bietet gzipUnterstützung (über die -zFlagge), die nur Ihrer Bequemlichkeit dient. Der gzipBefehl / lib ist völlig unabhängig. Der obige Befehl ist effektiv der gleiche wie
tar -cv directory | gzip > archive.tar.gz
Zum Dekomprimieren und Entpacken des Archivs in das aktuelle Verzeichnis, das Sie verwenden würden
tar -zxvf archive.tar.gz
Dieser Befehl ist im Grunde derselbe wie
gunzip < archive.tar.gz | tar -xv
tarhat viele, viele, VIELE andere Möglichkeiten und Verwendungen; Ich empfehle von Herzen, die Manpage irgendwann durchzulesen.
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 -zxvfoder sogar extrahiert werden zcat file.tar.gz | tar -xv. Da der Teer völlig unabhängig von gzip ist, enthält der tarBefehl aus Bequemlichkeitsgründen nur gzip-Unterstützung.
Patrick
Ich benutze es tar cvzfschon eine ganze Weile. Eines ist zu beachten: Wenn Sie 7-zipeine *.tar.gzDatei mit Windows ( muss angegeben werden) entpacken , dauert es zwei Runden. Eine, um die *.tar.gzDatei in eine *.tarDatei zu entpacken , die nächste, um die TAR-Datei in den ursprünglichen Inhalt zu entpacken. Es erhöht die gesamte Entpackzeit, insbesondere für große Dateien (z. B. Protokolle)
Jeff Xiao
1
Hat die Benennung des Archivs maschinelle Auswirkungen? Ich weiß, dass es nett wäre, die Leute über den Algorithmus zu informieren, der ursprünglich für das Zip-Verfahren verwendet wurde (daher .gz), aber ansonsten spielt es tatsächlich eine Rolle, wie Sie das Archiv benennen.
Hallo_Hier_undy
3
@hello_there_andy Es macht keinen Unterschied zu den meisten Unixen, aber Windows (und die Vervollständigung von Smart Tabs unter Linux) gehen von Annahmen aus, die auf der Dateinamenerweiterung basieren.
Der gzipBefehl komprimiert ein Verzeichnis bei Verwendung des -rSchalters nicht rekursiv in eine einzelne ZIP-Datei . Vielmehr wird diese Verzeichnisstruktur durchlaufen und jede gefundene Datei in eine separate Datei komprimiert.
Wenn Sie die Verzeichnisstruktur lieber tarkomprimieren möchten, möchten Sie wahrscheinlich den Befehl verwenden und dann die resultierende .tarDatei komprimieren .
#!/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 der Verwendung testen (da es ein 'rm -f' gibt, das möglicherweise wichtige Daten entfernen kann, wenn es auf ungewöhnliche Weise verwendet wird).
Wie benutzt man:
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.
So komprimieren Sie ALLE Dateien in einem Verzeichnis: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (Gehen Sie vorsichtig mit dem Befehl find um, testen Sie ihn -exec echo {}zuerst mit und stellen Sie sicher, dass Sie nicht './' erfassen, wodurch das Verzeichnis PARENT komprimiert wird und möglicherweise Ihr gesamtes Ausgangsverzeichnis beschädigt wird.)
Andrew Lorien
1
Ich empfehle pigz( Parallele Implementierung von GZip )
Wenn Sie eine neue Frage haben, fragen Sie es bitte durch Klicken Frage stellen Taste. Fügen Sie einen Link zu dieser Frage hinzu, wenn dies zur Bereitstellung des Kontexts beiträgt. - Aus der Bewertung
Jeff Schaller
2
@ JeffSchaller: Dies ist eine Antwort. Es ist sehr falsch (glaube ich), aber es ist eindeutig eine Antwort.
Scott
1
@ize: Ich bin mir ziemlich sicher, dass der Befehl, den Sie gepostet haben, gzip nicht verwendet.
Dhag
1
Punkte für die Verwendung von zip wie die gestellte Frage, höchstwahrscheinlich hätte der Autor gerne gewusst, dass es möglich ist, genau dasselbe zu tun, was er früher unter Windows getan hat. Es ist traurig, dass die meisten Menschen nicht so weit denken möchten.
Florian Heigl
2
Es ist schwierig, wenn in der Frage angegeben wird, dass ... "mit gzip".
Jeff Schaller
1
Wenn Sie die Datei im Hintergrund tarieren möchten, verwenden Sie der Vollständigkeit halber die Antwort von @ Shadur und fügen Sie &am Ende Folgendes hinzu :
gzip -r myfolder
welche Dateien rekursiv gzipen. Auf die gleiche Weise können Sie Dateiengunzip -r myfolder
entpacken, wobei Dateien rekursiv entpackt werden. Für weitere Informationenman gzip
tar
; Es unterstützt Optionen für die Komprimierung.gzip
ist als Ergänzungtar
und nicht als Ersatz gedacht .comment
da das nicht die Antwort auf seine Frage war.1
und2
unter Ordnerplayground
.gzip -r ./playground
Sie erhalten1.gz
und2.gz
(und nicht mehr1
und2
Dateien) unter Ordnerplayground
, NICHT eine gezippte Datei mit allem darin.Antworten:
Nein.
Im Gegensatz zu
zip
,gzip
fungiert als Kompressionsalgorithmus nur .Aus verschiedenen Gründen , von denen einige in der Zeit der Bandlaufwerke hören, verwendet Unix ein Programm namens
tar
Daten zu archivieren, die dann mit einem Komprimierungsprogramm komprimiert werden können , wiegzip
,bzip2
,7zip
usw.Um ein Verzeichnis zu "zipen", wäre der richtige Befehl
Dies wird sagen
tar
zukomprimiere es mit dem z (gzip) Algorithmus
c (Erstellen) eines Archivs aus den Dateien in
directory
(tar
ist standardmäßig rekursiv)v (ausführlich) Auflisten (unter / dev / stderr, damit Pipe-Befehle nicht betroffen sind) aller Dateien, die dem Archiv hinzugefügt werden.
und speichern Sie die Ausgabe als f (Datei) mit dem Namen
archive.tar.gz
Der
tar
Befehl bietetgzip
Unterstützung (über die-z
Flagge), die nur Ihrer Bequemlichkeit dient. Dergzip
Befehl / lib ist völlig unabhängig. Der obige Befehl ist effektiv der gleiche wieZum Dekomprimieren und Entpacken des Archivs in das aktuelle Verzeichnis, das Sie verwenden würden
Dieser Befehl ist im Grunde derselbe wie
tar
hat viele, viele, VIELE andere Möglichkeiten und Verwendungen; Ich empfehle von Herzen, die Manpage irgendwann durchzulesen.quelle
tar -cv directory | gzip > archive.tar.gz
. Das resultierende Archiv kann dann mittar -zxvf
oder sogar extrahiert werdenzcat file.tar.gz | tar -xv
. Da der Teer völlig unabhängig von gzip ist, enthält dertar
Befehl aus Bequemlichkeitsgründen nur gzip-Unterstützung.tar cvzf
schon eine ganze Weile. Eines ist zu beachten: Wenn Sie7-zip
eine*.tar.gz
Datei mit Windows ( muss angegeben werden) entpacken , dauert es zwei Runden. Eine, um die*.tar.gz
Datei in eine*.tar
Datei zu entpacken , die nächste, um die TAR-Datei in den ursprünglichen Inhalt zu entpacken. Es erhöht die gesamte Entpackzeit, insbesondere für große Dateien (z. B. Protokolle)Der
gzip
Befehl komprimiert ein Verzeichnis bei Verwendung des-r
Schalters nicht rekursiv in eine einzelne ZIP-Datei . Vielmehr wird diese Verzeichnisstruktur durchlaufen und jede gefundene Datei in eine separate Datei komprimiert.Beispiel
Vor
Führen Sie jetzt den
gzip
Befehl ausnach
Wenn Sie die Verzeichnisstruktur lieber
tar
komprimieren möchten, möchten Sie wahrscheinlich den Befehl verwenden und dann die resultierende.tar
Datei komprimieren .Beispiel
Was zu folgender Einzeldatei führt:
Sie können den Inhalt bestätigen:
quelle
Ich habe diese 2 Befehle geschrieben:
gzipdir
:ungzipdir
:(!!!) Bitte vor der Verwendung testen (da es ein 'rm -f' gibt, das möglicherweise wichtige Daten entfernen kann, wenn es auf ungewöhnliche Weise verwendet wird).
Wie benutzt man:
cd /home/; gzipdir MyDirectory
odergzipdir /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.
quelle
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(Gehen Sie vorsichtig mit dem Befehl find um, testen Sie ihn-exec echo {}
zuerst mit und stellen Sie sicher, dass Sie nicht './' erfassen, wodurch das Verzeichnis PARENT komprimiert wird und möglicherweise Ihr gesamtes Ausgangsverzeichnis beschädigt wird.)Ich empfehle
pigz
( Parallele Implementierung von GZip )tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
quelle
Die Antwort auf die Frage "Kann ich einen ganzen Ordner mit zip unter Linux komprimieren?" Lautet wie folgt:
quelle
Wenn Sie die Datei im Hintergrund tarieren möchten, verwenden Sie der Vollständigkeit halber die Antwort von @ Shadur und fügen Sie
&
am Ende Folgendes hinzu :quelle
Wenn Ihr Linux-Tar diese
-z
Option nicht unterstützt , können Sie Folgendes verwenden:quelle