Ik probeer een map in unix te zippen. Kan dat worden gedaan met het gzip-commando?
Opmerkingen
Antwoord
Nee.
In tegenstelling tot zip
, functioneert gzip
als een compressie-algoritme alleen .
Om verschillende redenen, waarvan sommige teruggaan naar het tijdperk van tapedrives, gebruikt Unix een programma met de naam tar
om gegevens te archiveren, die vervolgens kunnen worden gecomprimeerd met een compressieprogramma zoals gzip
, bzip2
, 7zip
, enz.
In om een map te “zippen”, zou het juiste commando zijn
tar -zcvf archive.tar.gz directory/
Dit zal tar
vertellen aan
-
comprimeer het met het z (gzip) algoritme
-
c (maak) een archief van de bestanden in
directory
(tar
is standaard recursief) -
v (uitgebreide) lijst (op / dev / stderr dus het heeft “geen invloed op doorgesluisde commandos) alle bestanden die het aan het archief toevoegt.
-
en sla de uitvoer op als een f (bestand) genaamd
archive.tar.gz
Het tar
commando biedt gzip
ondersteuning (via de -z
vlag) puur voor uw gemak . Het gzip
commando / lib is volledig gescheiden. Het bovenstaande commando is in feite hetzelfde als
tar -cv directory | gzip > archive.tar.gz
Om het archief te decomprimeren en uit te pakken in de huidige directory die je zou gebruiken
tar -zxvf archive.tar.gz
Dat commando is in feite hetzelfde als
gunzip < archive.tar.gz | tar -xv
tar
heeft veel, vele, VEEL andere opties en toepassingen; Ik raad je van harte aan om de manpage eens door te lezen.
Reacties
- Om de dingen nog explicieter te maken, dit is precies gelijk aan
tar -cv directory | gzip > archive.tar.gz
. Het resulterende archief kan vervolgens worden uitgepakt mettar -zxvf
of zelfszcat file.tar.gz | tar -xv
. Het punt is dat de tar volledig onafhankelijk is van de gzip, de opdrachttar
bevat alleen gzip-ondersteuning voor het gemak. - ik heb al een tijdje. één ding om op te merken: als u Windows (
7-zip
te specificeren) gebruikt om een*.tar.gz
-bestand uit te pakken, duurt het twee rondes. Een om het*.tar.gz
-bestand uit te pakken in een*.tar
-bestand, de volgende om dat tar-bestand uit te pakken in de originele inhoud. het verlengt de totale uitpaktijd, vooral voor grote bestanden (bijv. logboeken) - Heeft de naamgeving van het archief invloed op iets machinaals? Ik weet dat het leuk zou zijn om mensen te laten weten welk algoritme oorspronkelijk werd gebruikt om het te zippen (vandaar .gz), maar afgezien daarvan maakt het eigenlijk uit hoe je het archief een naam geeft?
- @hello_there_andy Het maakt nee verschil met de meeste unixen, maar windows (en slimme tabaanvulling in linux) zal aannames doen op basis van bestandsnaamextensie.
- @vadimkotov Dit zou kunnen zijn wat je ‘ op zoek naar: superuser.com/questions/168749/…
Answer
Het gzip
commando zal een map niet recursief comprimeren in een enkel zip-bestand, wanneer de -r
schakelaar. Het zal eerder die directorystructuur doorlopen en elk gevonden bestand in een apart bestand zippen.
Voorbeeld
before
$ tree dir1/ dir1/ |-- dir11 | |-- file11 | |-- file12 | `-- file13 |-- file1 |-- file2 `-- file3
voer nu de gzip
commando
$ gzip -r dir1
na
$ tree dir1/ dir1/ |-- dir11 | |-- file11.gz | |-- file12.gz | `-- file13.gz |-- file1.gz |-- file2.gz `-- file3.gz
Als u “liever de directorystructuur wilt zipen, dan” wilt u waarschijnlijk de tar
-opdracht gebruiken en de resulterende .tar
bestand.
$ tar zcvf dir1.tar.gz dir1/
Voorbeeld
$ 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
Wat resulteert in het volgende enkele bestand:
$ ls -l | grep tar -rw-rw-r-- 1 saml saml 271 Oct 1 08:07 dir1.tar.gz
U kunt de inhoud ervan bevestigen:
$ 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
Answer
Het antwoord op de vraag “Kan ik een hele map zippen met gzip [op linux]?” is dat je het zip
programma kunt gebruiken in plaats van gzip, met de syntaxis:
zip -r <zip file name> <folder to zip>
Reacties
- @JeffSchaller: Dit is een antwoord. Het is een ernstig verkeerde (denk ik), maar het is duidelijk een antwoord.
- @ize: ik ‘ ben er vrij zeker van dat het commando dat je hebt gepost dat niet doet, gebruik in feite gzip.
- Punten voor het gebruik van zip zoals de gestelde vraag, hoogstwaarschijnlijk had de auteur het graag willen weten ‘ s mogelijk om HET EXACT TE DOEN HETZELFDE als hij vroeger deed op ramen. Het is triest dat de meeste mensen ‘ niet zo ver willen denken.
- Het is lastig als de vraag specificeert … “gzip gebruiken”.
- Ik ‘ stem in met dit antwoord omdat ik denk dat het product (een zipbestand) waarschijnlijk belangrijker is dan de methode (met gzip).
Answer
Ik heb deze 2 commandos gescript:
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
(!!!) Test voor gebruik (aangezien er een “rm -f” is die mogelijk belangrijke gegevens kan verwijderen als deze op een ongebruikelijke manier wordt gebruikt).
Hoe te gebruiken:
cd /home/; gzipdir MyDirectory
of gzipdir /home/MyDirectory
Zal /home/MyDirectory.tgz maken en MyDirectory verwijderen bij succes (!!!).
ungzipdir /home/MyDirectory.tgz
Zal / home / MyDirectory maken en /home/MyDirectory.tgz verwijderen bij succes.
Opmerkingen
- Om ALLE bestanden in een directory te zipen:
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(wees voorzichtig met het find commando, test het met-exec echo {}
en zorg ervoor dat u ‘ niet ‘ ./’ die de PARENT-directory zal dichtritsen, waardoor mogelijk uw hele startpagina wordt verbroken)
Answer
Ik raad aan om pigz
( Parallelle implementatie van GZip )
tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
te gebruiken
Reacties
- Ik gebruik het ook veel (en pixz), maar werkt het als pipes en output-omleiding een rol spelen?
Antwoord
Als je linux-tar de -z
optie niet ondersteunt u kunt het volgende gebruiken:
tar -cvf - dir | gzip > dir.tar.gz
Antwoord
Voor de volledigheid, als u wil je het bestand in de bac kground, gebruik het antwoord van @Shadur en voeg uiteindelijk &
toe:
tar -zcvf archive.tar.gz directory/ &
gzip -r myfolder
gebruiken om bestanden recursief te gzippen. Op dezelfde manier kun je bestanden uitpakken metgunzip -r myfolder
die bestanden recursief zal unzippen. Voor meer informatie,man gzip
tar
; het ondersteunt opties voor compressie .gzip
is ontworpen als aanvulling optar
, niet als vervanging.comment
aangezien dat niet het antwoord op zijn vraag was.1
en2
onder mapplayground
gzip -r ./playground
geeft je1.gz
en2.gz
(en niet meer1
en2
bestanden) in de mapplayground
, NIET een gezipt bestand met alles erin.