Jeg prøver å zip en mappe i unix. Kan det gjøres ved hjelp av gzip-kommandoen?

Kommentarer

  • du kan bruke gzip -r myfolder som vil gzip filer rekursivt. På samme måte som du kan pakke ut filer ved hjelp av gunzip -r myfolder som vil pakke ut filer rekursivt. For mer informasjon, man gzip
  • Bruk tar; det støtter alternativer for komprimering . gzip er designet som et supplement til tar, ikke som erstatning.
  • Merk at @ val0x00ff ‘ sitt forslag er nesten absolutt ikke det du vil oppnå.
  • @Shadur at ‘ hvorfor jeg la det ut som comment siden det ikke var svaret på spørsmålet hans.
  • Å demostrere hva @Shadur betyr. Gitt filer 1 og 2 under mappen playground . gzip -r ./playground gir deg 1.gz og 2.gz (og ikke mer 1 og 2 filer) under mappen playground, IKKE en zip-fil med alt i den.

Svar

Nei.

I motsetning til zip, fungerer gzip som en komprimeringsalgoritme bare .

På grunn av forskjellige grunner, hvorav noen hører tilbake til tiden med båndstasjoner, bruker Unix et program som heter tar for å arkivere data, som deretter kan komprimeres med et komprimeringsprogram som gzip, bzip2, 7zip osv.

I for å «zip» en katalog, vil den riktige kommandoen være

tar -zcvf archive.tar.gz directory/ 

Dette vil fortelle tar til

  • komprimerer den ved hjelp av z (gzip) algoritme

  • c (opprett) et arkiv fra filene i directory (tar er rekursiv som standard)

  • v (ordentlig) liste (på / dev / stderr så det påvirker ikke piped-kommandoer) alle filene den legger til i arkivet.

  • og lagrer utdata som en f (fil) med navnet archive.tar.gz

tar -kommandoen tilbyr gzip støtte (via -z -flagget) bare for din bekvemmelighet . gzip -kommandoen / lib er helt atskilt. Kommandoen ovenfor er effektivt den samme som

tar -cv directory | gzip > archive.tar.gz 

For å dekomprimere og pakke ut arkivet til den aktuelle katalogen, vil du bruke

tar -zxvf archive.tar.gz 

Den kommandoen er faktisk den samme som

gunzip < archive.tar.gz | tar -xv 

tar har mange, mange, mange andre alternativer og bruksområder også; Jeg anbefaler på det sterkeste å lese gjennom siden sin en gang.

Kommentarer

  • Bare for å gjøre ting enda mer eksplisitte, er dette nøyaktig sivilistisk til tar -cv directory | gzip > archive.tar.gz. Det resulterende arkivet kan deretter ekstraheres med tar -zxvf eller til og med zcat file.tar.gz | tar -xv. Poenget er at tjæren er helt uavhengig av gzip, kommandoen tar inneholder bare gzip-støtte for enkelhets skyld.
  • Jeg har brukt tar cvzf en god stund. en ting å merke seg: Hvis du bruker Windows (7-zip for å spesifiseres) for å pakke ut en *.tar.gz -fil, tar det to runder. En for å pakke ut *.tar.gz -fil til en *.tar -fil, den neste for å pakke ut tarfilen til det opprinnelige innholdet. det øker den totale utpakkingstiden, spesielt for store filer (f.eks. logger)
  • Påvirker navngivningen av arkivet noe maskinmessig? Jeg vet at det ville være fint å fortelle folk at algoritmen opprinnelig ble brukt til å zip den (derav .gz), men bortsett fra det, er det faktisk viktig hvordan du navngir arkivet?
  • @hello_there_andy Det gir ingen forskjell fra de fleste unixer, men windows (og fullføring av smarttabell i linux) gir antagelser basert på filendelse.
  • @vadimkotov Dette kan være det du ‘ leter etter: superbruker.com/questions/168749/…

Svar

gzip -kommandoen komprimerer ikke en katalog rekursivt til en enkelt zip-fil når du bruker -r bryter. Snarere vil det gå den katalogstrukturen og pakke hver fil som den finner i en egen fil.

Eksempel

Før

$ tree dir1/ dir1/ |-- dir11 | |-- file11 | |-- file12 | `-- file13 |-- file1 |-- file2 `-- file3 

kjør nå gzip kommando

$ gzip -r dir1 

efter

$ tree dir1/ dir1/ |-- dir11 | |-- file11.gz | |-- file12.gz | `-- file13.gz |-- file1.gz |-- file2.gz `-- file3.gz 

Hvis du foretrekker å zip opp katalogstrukturen, vil du sannsynligvis bruke tar -kommandoen, og deretter 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 bekrefte innholdet:

$ 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ørsmålet «Kan jeg pakke en hel mappe ved hjelp av gzip [på linux]?» er at du kan bruke zip -programmet i stedet for gzip, med syntaksen:

zip -r <zip file name> <folder to zip> 

Kommentarer

  • @JeffSchaller: Dette er et svar. Det er veldig galt (tror jeg), men det er helt klart et svar.
  • @ize: Jeg ‘ Jeg er ganske sikker på at kommandoen du la ut ikke gjør det, faktisk bruk gzip.
  • Poeng for å bruke zip som spørsmålet, mest sannsynlig ville forfatteren gjerne ha visst det ‘ er mulig å GJØRE DET EKSAKTE Samme ting som han pleide å gjøre på windows. Det er trist de fleste ikke vil ‘ ikke ønsker å tenke så langt.
  • Det er vanskelig når spørsmålet spesifiserer … “ved hjelp av gzip”.
  • Jeg ‘ Jeg stemmer opp dette svaret siden jeg tror produktet (en zip-fil) sannsynligvis er viktigere enn metoden (ved hjelp av gzip).

Svar

Jeg skrev disse 2 kommandoene:

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 før bruk (da det er en «rm -f» som potensielt kan fjerne viktige data hvis de brukes på en uvanlig måte).

Slik bruker du:

cd /home/; gzipdir MyDirectory eller gzipdir /home/MyDirectory

Skaper /home/MyDirectory.tgz og fjern MyDirectory etter suksess (!!!).

ungzipdir /home/MyDirectory.tgz

Vil opprette / home / MyDirectory og fjerne /home/MyDirectory.tgz etter suksess.

Kommentarer

  • For å pakke opp ALLE filene i en katalog: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (vær forsiktig med finn-kommandoen, test den med -exec echo {} først, og sørg for at ‘ ikke fanger ‘ ./’ som vil zip opp PARENT-katalogen, muligens bryte hele hjemmet dir)

Svar

Jeg anbefaler å bruke pigz ( Parallell implementering av GZip )

tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz

Kommentarer

  • Jeg bruker den også mye (og pixz), men fungerer det når rør og utgående omdirigering kommer til spill?

Svar

Hvis din Linux-tjære ikke støtter -z alternativet kan du bruke følgende:

tar -cvf - dir | gzip > dir.tar.gz 

Svar

For fullstendighet, hvis du vil tjære filen i baken kground, bruk @Shadurs svar og legg til & til slutt:

tar -zcvf archive.tar.gz directory/ & 

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *