Yritän pakata kansion unix-tiedostoon. Voinko tehdä sen gzip-komennolla?
Kommentit
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 purkaatar -zxvf
tai jopazcat 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.
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/ &
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
tar
; se tukee pakkausasetuksia .gzip
on suunniteltu täydentämään tiedostoatar
, ei korvaavana.comment
, koska se ei ollut vastaus hänen kysymykseensä.1
ja2
kansionplayground
alla .gzip -r ./playground
antaa sinulle1.gz
ja2.gz
(eikä enempää1
– ja2
-tiedostot) kansiossaplayground
, EI zip-tiedostoa, jossa on kaikki sisältö.