Yritän pakata kansion unix-tiedostoon. Voinko tehdä sen gzip-komennolla?

Kommentit

  • voit käyttää gzip -r myfolder, joka pakkaa tiedostot rekursiivisesti. Samalla tavalla kuin voit purkaa tiedostot käyttämällä gunzip -r myfolder joka purkaa tiedostot rekursiivisesti. Lisätietoja: man gzip
  • Käytä tar; se tukee pakkausasetuksia . gzip on suunniteltu täydentämään tiedostoa tar, ei korvaavana.
  • Huomaa, että @ val0x00ff ’ ehdotus ei melkein varmasti ole se, mitä haluat saavuttaa.
  • @Shadur että ’ siksi lähetin sen nimellä comment, koska se ei ollut vastaus hänen kysymykseensä.
  • Demostrate mitä @Shadur tarkoittaa. Annetut tiedostot 1 ja 2 kansion playground alla . gzip -r ./playground antaa sinulle 1.gz ja 2.gz (eikä enempää 1 – ja 2 -tiedostot) kansiossa playground, EI zip-tiedostoa, jossa on kaikki sisältö.

Vastaa

Ei.

Toisin kuin zip, gzip toimii pakkausalgoritmina vain .

Monista syistä, joista jotkut palaavat takaisin nauha-asemien aikoihin, Unix käyttää tar -nimistä ohjelmaa tietojen arkistoimiseksi, joka voidaan sitten pakata pakkausohjelmalla kuten gzip, bzip2, 7zip jne.

jotta hakemisto ”pakataan”, oikea komento on

tar -zcvf archive.tar.gz directory/ 

Tämä kertoo tar

  • pakkaa se käyttämällä z (gzip) algoritmia

  • c (luo) arkisto (tar on oletuksena rekursiivinen)

  • v (sanallisesti) luettelo (päällä / dev / stderr joten se ei vaikuta putkikomennoihin) kaikkiin tiedostoihin, jotka se lisää arkistoon.

  • ja tallenna lähtö f (tiedosto) nimeltään archive.tar.gz

tar -komento tarjoaa gzip -tukea (lipun -z kautta) puhtaasti sinun avuksesi . gzip -komento / lib on täysin erillinen. Yllä oleva komento on käytännössä sama kuin

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

Voit purkaa ja purkaa arkiston nykyiseen hakemistoon, jota käytät

tar -zxvf archive.tar.gz 

Komento on käytännössä sama kuin

gunzip < archive.tar.gz | tar -xv 

tar on monia, monia, monia muita vaihtoehtoja ja käyttötarkoituksia; Suosittelen sydämellisesti joskus lukea sen sivut.

Kommentit

  • Pelkästään selventääkseen asioita, tämä on täsmälleen samanlainen kuin tar -cv directory | gzip > archive.tar.gz. Tuloksena oleva arkisto voidaan sitten purkaa tar -zxvf tai jopa zcat file.tar.gz | tar -xv. Koska terva on täysin riippumaton gzip: stä, tar -komento sisältää vain gzip-tuen mukavuuden vuoksi.
  • Olen käyttänyt tar cvzf jonkin aikaa. yksi asia, joka on huomioitava: Jos käytät Windowsia (7-zip määritetään) *.tar.gz -tiedoston purkamiseen, kestää kaksi kierrosta. Yksi puretaan *.tar.gz -tiedosto *.tar -tiedostoon, seuraava puretaan kyseinen tar-tiedosto alkuperäiseen sisältöön. se pidentää purkamisen kokonaisaikaa, varsinkin suurille tiedostoille (esim. lokit)
  • Vaikuttaako arkiston nimeäminen mihinkään koneellisesti? Tiedän, että olisi mukavaa antaa ihmisille tietää algoritmi, jota alun perin käytettiin sen vetämiseen (täten .gz), mutta sen lisäksi, onko sillä väliä miten nimität arkiston?
  • @hello_there_andy Se ei tee mitään ero useimpiin unixeihin, mutta Windows (ja älykkään välilehden viimeistely Linuxissa) tekee oletuksia tiedostonimen laajennuksen perusteella.
  • @vadimkotov Tämä voi olla mitä ’ uudelleen etsii: superuser.com/questions/168749/…

Vastaus

gzip -komento ei pakkaa hakemistoa rekursiivisesti yhdeksi zip-tiedostoksi käytettäessä -r -kytkin. Pikemminkin se kävelee hakemistorakenteen ja pakkaa kaikki löytämänsä tiedostot erilliseen tiedostoon.

Esimerkki

ennen

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

suorita nyt gzip komento

$ gzip -r dir1 

jälkeen

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

Jos haluat hakea hakemistorakenteen ylös, haluat todennäköisesti käyttää tar -komentoa ja pakata sitten tuloksena oleva tulos .tar -tiedosto.

$ tar zcvf dir1.tar.gz dir1/ 

Esimerkki

$ 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 

Mikä johtaa seuraavaan yksittäiseen tiedostoon:

$ ls -l | grep tar -rw-rw-r-- 1 saml saml 271 Oct 1 08:07 dir1.tar.gz 

Voit vahvistaa sen sisällön:

$ 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 

Vastaus

Vastaus kysymykseen ”Voinko pakata kokonaisen kansion gzip [on linux] -palvelimella?” on, että voit käyttää zip ohjelmaa gzip: n sijasta syntaksin kanssa:

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

kommentit

  • @JeffSchaller: Tämä on vastaus. Se on erittäin väärä (uskon), mutta se on selvästi vastaus.
  • @ize: Olen ’ m melko varma, että lähettämäsi komento ei, käytä itse asiassa gzip-tiedostoa.
  • Pisteitä zip-tiedoston käyttämisestä, kuten esitetty kysymys, todennäköisesti tekijä olisi halunnut tietää sen ’ mahdollista tehdä tarkalleen SAMAA ASIAKASTA kuin hän tapasi tehdä ikkunoissa. On surullista, että useimmat ihmiset

eivät halua ajatella niin pitkälle.

  • On hankalaa, kun kysymyksessä määritetään … ”gzip: n käyttö”.
  • I ’ äänestän tätä vastausta, koska mielestäni tuote (zip-tiedosto) on todennäköisesti tärkeämpi kuin menetelmä (käyttäen gzip-tiedostoa).
  • vastaus

    Kirjoitin nämä kaksi komentoa:

    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 

    (!!!) Testaa ennen käyttöä (koska on olemassa ”rm -f”, joka voi mahdollisesti poistaa tärkeät tiedot, jos niitä käytetään harvinaisella tavalla).

    Käyttö:

    cd /home/; gzipdir MyDirectory tai gzipdir /home/MyDirectory

    Luo /home/MyDirectory.tgz ja poistaa MyDirectory onnistumisen yhteydessä (!!!).

    ungzipdir /home/MyDirectory.tgz

    Luo / home / MyDirectory ja poistaa /home/MyDirectory.tgz onnistumisen yhteydessä.

    Kommentit

    • Kaikkien hakemistossa olevien tiedostojen noutaminen: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (ole varovainen etsi-komennon kanssa, testaa se -exec echo {} ensin ja varmista, että ’ ei kaapata ’ ./’ joka vie PARENT-hakemiston, mikä saattaa rikkoa koko kotisi dir)

    Vastaa

    Suosittelen käyttämään pigz ( GZip-sovelluksen rinnakkaistoteutus )

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

    kommentit

    • Käytän sitä myös paljon (ja pixz), mutta toimiiko se, kun putket ja lähtöjen uudelleenohjaus tulevat esiin?

    Vastaa

    Jos Linux-tarva ei tue vaihtoehtoa -z voit käyttää seuraavaa:

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

    Vastaa

    Täydellisyyteen, jos haluat tervaa tiedoston bac-tiedostoon kground, käytä @Shadur -vastausta ja lisää lopuksi &:

    tar -zcvf archive.tar.gz directory/ & 

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *