Încerc să arhivez un folder în unix. Se poate face acest lucru folosind comanda gzip?

Comentarii

  • puteți utiliza gzip -r myfolder care va gzip fișierele recursiv. În același mod puteți dezarhiva fișierele folosind gunzip -r myfolder care va dezarhiva fișierele recursiv. Pentru mai multe informații, man gzip
  • Utilizați tar; acceptă opțiuni de compresie . gzip este conceput ca un complement la tar, nu ca înlocuitor.
  • Rețineți că @ val0x00ff ‘ aproape sigur nu este ceea ce doriți să realizați.
  • @Shadur că ‘ este motivul pentru care am postat-o ca comment deoarece acesta nu a fost răspunsul la întrebarea sa.
  • Pentru a demonstra ce înseamnă @Shadur. Fișiere date 1 și 2 sub folderul playground . gzip -r ./playground vă va oferi 1.gz și 2.gz (și nu mai mult 1 și 2 fișiere) sub folderul playground, NU un fișier comprimat cu totul în el.

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ă cu tar -zxvf sau chiar zcat file.tar.gz | tar -xv. Adevărat fiind că tarul este complet independent de gzip, comanda tar 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/ & 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *