Jeg prøver at zip en mappe i unix. Kan det gøres ved hjælp af gzip-kommandoen?

Kommentarer

  • du kan bruge gzip -r myfolder som gzip filer rekursivt. På samme måde kan du pakke filer ud ved hjælp af gunzip -r myfolder som vil pakke filer rekursivt ud. For mere information man gzip
  • Brug tar; det understøtter komprimeringsmuligheder . gzip er designet som et supplement til tar, ikke som en erstatning.
  • Bemærk, at @ val0x00ff ‘ forslag er næsten helt sikkert ikke det, du vil opnå.
  • @Shadur at ‘ hvorfor jeg sendte det som comment da det ikke var svaret på hans spørgsmål.
  • At nedtone hvad @Shadur betyder. Givne filer 1 og 2 under mappe playground . gzip -r ./playground giver dig 1.gz og 2.gz (og ikke mere 1 og 2 filer) under mappen playground, IKKE en zip-fil med alt i den.

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 med tar -zxvf eller endda zcat file.tar.gz | tar -xv. Pointen er, at tjæren er helt uafhængig af gzip, kommandoen tar 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/ & 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *