Jeg prøver å zip en mappe i unix. Kan det gjøres ved hjelp av gzip-kommandoen?
Kommentarer
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 medtar -zxvf
eller til og medzcat file.tar.gz | tar -xv
. Poenget er at tjæren er helt uavhengig av gzip, kommandoentar
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/ &
gzip -r myfolder
som vil gzip filer rekursivt. På samme måte som du kan pakke ut filer ved hjelp avgunzip -r myfolder
som vil pakke ut filer rekursivt. For mer informasjon,man gzip
tar
; det støtter alternativer for komprimering .gzip
er designet som et supplement tiltar
, ikke som erstatning.comment
siden det ikke var svaret på spørsmålet hans.1
og2
under mappenplayground
.gzip -r ./playground
gir deg1.gz
og2.gz
(og ikke mer1
og2
filer) under mappenplayground
, IKKE en zip-fil med alt i den.