Jeg prøver at zip en mappe i unix. Kan det gøres ved hjælp af gzip-kommandoen?
Kommentarer
Svar
Nej
I modsætning til zip
fungerer gzip
som en kompressionsalgoritme kun .
På grund af forskellige grunde, hvoraf nogle hører tilbage til bånddrevens æra, bruger Unix et program ved navn tar
til arkivering af data, som derefter kan komprimeres med et komprimeringsprogram som gzip
, bzip2
, 7zip
osv.
I for at “zip” en mappe, ville den korrekte kommando være
tar -zcvf archive.tar.gz directory/
Dette fortæller tar
til
-
komprimer det ved hjælp af z (gzip) algoritme
-
c (opret) et arkiv fra filerne i
directory
(tar
er som standard rekursiv) -
v (verbosely) liste (on / dev / stderr så det påvirker ikke piped-kommandoer) alle de filer, det føjer til arkivet.
-
og gemmer output som en f (fil) med navnet
archive.tar.gz
tar
kommandoen tilbyder gzip
support (via -z
-flagget) rent for din bekvemmelighed . gzip
kommandoen / lib er helt separat. Kommandoen ovenfor er faktisk den samme som
tar -cv directory | gzip > archive.tar.gz
For at dekomprimere og pakke arkivet ud i den aktuelle mappe, skal du bruge
tar -zxvf archive.tar.gz
Denne kommando er faktisk den samme som
gunzip < archive.tar.gz | tar -xv
tar
har mange, mange, mange andre muligheder og anvendelser så godt; Jeg anbefaler varmt at læse igennem sin side en gang.
Kommentarer
- Bare for at gøre tingene endnu mere eksplicitte er dette nøjagtigt lig med
tar -cv directory | gzip > archive.tar.gz
. Det resulterende arkiv kan derefter ekstraheres medtar -zxvf
eller enddazcat file.tar.gz | tar -xv
. Pointen er, at tjæren er helt uafhængig af gzip, kommandoentar
inkluderer bare gzip-understøttelse for nemheds skyld. - Jeg har brugt
tar cvzf
i et stykke tid. en ting at bemærke: Hvis du bruger Windows (7-zip
til at blive specificeret) til at pakke en*.tar.gz
-fil ud, tager det to runder. En til at pakke*.tar.gz
-fil ud i en*.tar
-fil, den næste til at pakke den tar-fil ud i det originale indhold. det øger den samlede udpakningstid, især for store filer (f.eks. logfiler) - Påvirker navngivningen af arkivet noget maskinmæssigt? Jeg ved, at det ville være rart at lade folk vide, hvilken algoritme der oprindeligt blev brugt til at zip den (deraf .gz), men bortset fra det gør det faktisk noget, hvordan man navngiver arkivet?
- @hello_there_andy Det betyder ingen forskel på de fleste unixer, men windows (og afslutning af smart fane i linux) antager antagelser baseret på filtypenavn.
- @vadimkotov Dette kan være hvad du ‘ re på udkig efter: superuser.com/questions/168749/…
Svar
gzip
kommandoen komprimerer ikke en mappe rekursivt til en enkelt zip-fil, når du bruger -r
switch. Snarere vil det gå den katalogstruktur og zip hver fil, som den finder, i en separat fil.
Eksempel
Før
$ tree dir1/ dir1/ |-- dir11 | |-- file11 | |-- file12 | `-- file13 |-- file1 |-- file2 `-- file3
kør nu gzip
kommando
$ gzip -r dir1
efter
$ tree dir1/ dir1/ |-- dir11 | |-- file11.gz | |-- file12.gz | `-- file13.gz |-- file1.gz |-- file2.gz `-- file3.gz
Hvis du foretrækker at zip-biblioteksstrukturen, vil du sandsynligvis bruge tar
-kommandoen og derefter komprimere den resulterende .tar
-fil.
$ tar zcvf dir1.tar.gz dir1/
Eksempel
$ 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
Hvilket resulterer i følgende enkeltfil:
$ ls -l | grep tar -rw-rw-r-- 1 saml saml 271 Oct 1 08:07 dir1.tar.gz
Du kan bekræfte dens indhold:
$ 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
Svar
Svaret på spørgsmålet “Kan jeg zip en hel mappe ved hjælp af gzip [på linux]?” er, at du kan bruge zip
-programmet i stedet for gzip med syntaksen:
zip -r <zip file name> <folder to zip>
Kommentarer
- @JeffSchaller: Dette er et svar. Det er alvorligt forkert (tror jeg), men det er helt klart et svar.
- @ize: Jeg ‘ Jeg er ret sikker på, at kommandoen, du har sendt, ikke gør det, faktisk bruge gzip.
- Punkter til brug af zip som det stillede spørgsmål, sandsynligvis ville forfatteren have ønsket at vide det ‘ er muligt at GØRE DET NØJAKTIGE Samme ting som han plejede at gøre på windows. Det er trist, de fleste mennesker ikke ‘ ikke ønsker at tænke så langt.
- Det er vanskeligt, når spørgsmålet angiver … “ved hjælp af gzip”.
- Jeg ‘ m opstemmer dette svar, da jeg tror, at produktet (en zip-fil) sandsynligvis er vigtigere end metoden (ved hjælp af gzip).
Svar
Jeg skriptede disse 2 kommandoer:
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 venligst inden brug (da der er en “rm -f”, som potentielt kan fjerne vigtige data, hvis de bruges på en usædvanlig måde).
Sådan bruges:
cd /home/; gzipdir MyDirectory
eller gzipdir /home/MyDirectory
Opretter /home/MyDirectory.tgz og fjern MyDirectory efter succes (!!!).
ungzipdir /home/MyDirectory.tgz
Opretter / home / MyDirectory og fjern /home/MyDirectory.tgz efter succes.
Kommentarer
- For at zip ALLE filer i en mappe:
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(pas på find-kommandoen, test den med-exec echo {}
først, og sørg for at ‘ ikke fanger ‘ ./’ som vil zip op i PARENT-biblioteket og muligvis bryde hele dit hjem dir)
Svar
Jeg anbefaler at bruge pigz
( Parallel implementering af GZip )
tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
Kommentarer
- Jeg bruger det også meget (og pixz), men fungerer det, når rør og outputomdirigering kommer i spil?
Svar
Hvis din linux-tjære ikke understøtter -z
kan du bruge følgende:
tar -cvf - dir | gzip > dir.tar.gz
Svar
For fuldstændighed, hvis du ønsker at tjære filen i bac kground, brug @Shadur “s svar og tilføj &
til sidst:
tar -zcvf archive.tar.gz directory/ &
gzip -r myfolder
som gzip filer rekursivt. På samme måde kan du pakke filer ud ved hjælp afgunzip -r myfolder
som vil pakke filer rekursivt ud. For mere informationman gzip
tar
; det understøtter komprimeringsmuligheder .gzip
er designet som et supplement tiltar
, ikke som en erstatning.comment
da det ikke var svaret på hans spørgsmål.1
og2
under mappeplayground
.gzip -r ./playground
giver dig1.gz
og2.gz
(og ikke mere1
og2
filer) under mappenplayground
, IKKE en zip-fil med alt i den.