Încerc să arhivez un folder în unix. Se poate face acest lucru folosind comanda gzip?
Comentarii
Răspuns
Nu
Spre deosebire de zip
, gzip
funcționează ca un algoritm de compresie numai .
Din diverse motive, dintre care unele ascultă înapoi pe epoca unităților de bandă, Unix folosește un program numit tar
pentru a arhiva datele, care pot fi apoi comprimate cu un program de compresie cum ar fi gzip
, bzip2
, 7zip
etc.
În pentru a „zip” un director, comanda corectă ar fi
tar -zcvf archive.tar.gz directory/
Acest lucru va spune tar
la
-
comprimați-l utilizând algoritmul z (gzip)
-
c (creați) o arhivă din fișierele din
directory
(tar
este recursiv în mod prestabilit) -
v (verbal) listă (pe / dev / stderr deci nu afectează comenzile canalizate) toate fișierele pe care le adaugă în arhivă.
-
și stochează ieșirea ca f (fișier) numit
archive.tar.gz
Comanda tar
oferă asistență gzip
(prin pavilionul -z
) doar pentru confortul dumneavoastră . Comanda gzip
este complet separată. Comanda de mai sus este efectiv aceeași ca
tar -cv directory | gzip > archive.tar.gz
Pentru a decomprima și despacheta arhiva în directorul curent, ați utiliza
tar -zxvf archive.tar.gz
Această comandă este efectiv aceeași ca
gunzip < archive.tar.gz | tar -xv
tar
are multe, multe, MULTE alte opțiuni și utilizări, de asemenea; Recomand din toată inima să citiți cândva pagina de manual.
Comentarii
- Doar pentru a face lucrurile și mai explicite, acest lucru este exact echivalent cu
tar -cv directory | gzip > archive.tar.gz
. Arhiva rezultată poate fi apoi extrasă cutar -zxvf
sau chiarzcat file.tar.gz | tar -xv
. Adevărat fiind că tarul este complet independent de gzip, comandatar
include doar suport gzip pentru comoditate. - am folosit
tar cvzf
pentru o vreme. un lucru de reținut: dacă utilizați Windows (7-zip
pentru a fi specificat) pentru a dezarhiva un fișier*.tar.gz
, este nevoie de două runde. Unul pentru a dezarhiva fișierul*.tar.gz
într-un fișier*.tar
, următorul pentru a dezarhiva fișierul tar în conținutul original. crește timpul total de dezarhivare, în special pentru fișierele mari (de ex. jurnale) - Numirea arhivei afectează ceva din punct de vedere al mașinii? Știu că ar fi frumos să îi anunți pe oameni algoritmul folosit inițial pentru a-l zip (deci .gz), dar în afară de asta, contează de fapt cum numești arhiva?
- @hello_there_andy diferență față de majoritatea unixurilor, dar Windows (și completarea inteligentă a filei în Linux) vor face presupuneri pe baza extensiei numelui de fișier.
- @vadimkotov Aceasta ar putea fi ceea ce ‘ re se caută: superuser.com/questions/168749/…
Răspuns
Comanda gzip
nu va comprima recursiv un director într-un singur fișier zip, când utilizați -r
comutator. Mai degrabă, va parcurge acea structură de directoare și arhivează fiecare fișier pe care îl găsește într-un fișier separat.
Exemplu
înainte
$ tree dir1/ dir1/ |-- dir11 | |-- file11 | |-- file12 | `-- file13 |-- file1 |-- file2 `-- file3
rulați acum gzip
comanda
$ gzip -r dir1
after
$ tree dir1/ dir1/ |-- dir11 | |-- file11.gz | |-- file12.gz | `-- file13.gz |-- file1.gz |-- file2.gz `-- file3.gz
Dacă preferați să arhivați structura directorului, probabil că veți dori să utilizați comanda tar
și apoi să comprimați rezultatul .tar
fișier.
$ tar zcvf dir1.tar.gz dir1/
Exemplu
$ 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
Care rezultă în următorul fișier unic:
$ ls -l | grep tar -rw-rw-r-- 1 saml saml 271 Oct 1 08:07 dir1.tar.gz
Puteți confirma conținutul acestuia:
$ 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
Răspuns
Răspunsul la întrebarea „Pot zip un întreg folder folosind gzip [pe linux]?” este că puteți utiliza programul zip
în locul gzip, cu sintaxa:
zip -r <zip file name> <folder to zip>
Comentarii
- @JeffSchaller: Acesta este un răspuns. Este una grav greșită (cred), dar în mod clar este un răspuns.
- @ize: Sunt ‘ destul de sigur că comanda pe care ați postat-o nu, de fapt, utilizați gzip.
- Puncte pentru utilizarea zip cum ar fi întrebarea pusă, cel mai probabil autorul ar fi dorit să știe că ‘ este posibil să FIE EXACTUL ACELASI LUCRU ca pe vremuri. Este trist că majoritatea oamenilor nu ‘ nu doresc să gândească până acum.
- Este dificil când întrebarea specifică … „folosind gzip”.
- ‘ susțin acest răspuns, deoarece consider că produsul (un fișier zip) este probabil mai important decât metoda (folosind gzip).
Răspuns
Am scris aceste 2 comenzi:
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
(!!!) Vă rugăm să testați înainte de utilizare (deoarece există un „rm -f” care ar putea elimina date importante dacă este utilizat într-un mod mai puțin frecvent).
Cum se folosește:
cd /home/; gzipdir MyDirectory
sau gzipdir /home/MyDirectory
Va crea /home/MyDirectory.tgz și va elimina MyDirectory cu succes (!!!).
ungzipdir /home/MyDirectory.tgz
Va crea / home / MyDirectory și va elimina /home/MyDirectory.tgz cu succes.
Comentarii
- Pentru a descărca toate fișierele dintr-un director:
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(aveți grijă cu comanda find, testați-o cu-exec echo {}
mai întâi și asigurați-vă că nu ‘ nu capturați ‘ ./’ care va arhiva directorul PĂRINȚ, eventual rupându-vă întreaga direcție de acasă)
Răspuns
Vă recomand să utilizați pigz
( Implementare paralelă a GZip )
tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
Comentarii
- Și eu îl folosesc foarte mult (și pixz), dar funcționează când intră în joc conductele și redirecționarea ieșirilor?
Răspuns
Dacă tarul dvs. Linux nu acceptă opțiunea -z
puteți utiliza următoarele:
tar -cvf - dir | gzip > dir.tar.gz
Răspuns
Pentru completitudine, dacă vreau să tarăm fișierul în bac kground, folosiți răspunsul lui @Shadur și adăugați &
la final:
tar -zcvf archive.tar.gz directory/ &
gzip -r myfolder
care va gzip fișierele recursiv. În același mod puteți dezarhiva fișierele folosindgunzip -r myfolder
care va dezarhiva fișierele recursiv. Pentru mai multe informații,man gzip
tar
; acceptă opțiuni de compresie .gzip
este conceput ca un complement latar
, nu ca înlocuitor.comment
deoarece acesta nu a fost răspunsul la întrebarea sa.1
și2
sub folderulplayground
.gzip -r ./playground
vă va oferi1.gz
și2.gz
(și nu mai mult1
și2
fișiere) sub folderulplayground
, NU un fișier comprimat cu totul în el.