Cum extrageți un singur folder dintr-o arhivă mare tar.gz?

Folosesc această comandă pe un 5GB arhivă

tar -zxvf archive.tar.gz /folder/in/archive 

acesta este modul corect de a face acest lucru? Se pare că durează pentru totdeauna fără ieșire din linia de comandă …

Comentarii

  • Ați folosit o cale absolută sau relativă? Ar trebui să fie relativ, în afară de asta, arată corect. Cât timp l-ați lăsat să ruleze și cât de bun este sistemul dvs.? Va dura cel puțin câteva minute pe o mașină rapidă. Potențial o oră sau mai mult? ' Rulez acum un test.
  • Da, s-a finalizat după ~ 1 oră, dar calea absolută a fost greșită, ai avut dreptate.
  • Pe Linux, puteți urmări cât de departe este în arhivă tar cu cat /proc/$(pidof tar)/fdinfo/0 (adaptați comanda dacă aveți mai multe tar rulează procesul).
  • De asemenea, partea importantă este lipsa unei bare oblice. Folosind folder/folder2/ nu a câștigat funcția '.

Răspuns

tar stochează căile relative în mod implicit . GNU tar spune chiar așa dacă încercați să stocați o cale absolută:

tar -cf foo.tar /home/foo tar: Removing leading `/" from member names 

Dacă trebuie să extrageți un anumit folder, aruncați o privire la ce se află în fișierul tar:

tar -tvf foo.tar 

Și notați exact numele fișierului. În cazul fișierului meu foo.tar, aș putea extrageți /home/foo/bar spunând:

tar -xvf foo.tar home/foo/bar # Note: no leading slash 

Deci nu, modul în care ați postat nu este (neapărat) corect modalitate de a o face. Trebuie să omiți slash-ul principal. Dacă doriți să simulați căi absolute, faceți cd / mai întâi și asigurați-vă că sunteți superutilizatorul. De asemenea, acest lucru face același lucru:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option 

Există motive foarte evidente, bune pentru care tar convertește căile în cele relative. Una este capacitatea de a restabili o arhivă în alte locuri decât sursa sa originală. altul este securitatea. Puteți extrage o arhivă, vă puteți aștepta ca fișierele sale să apară în directorul curent de lucru și, în schimb, să suprascrieți din greșeală fișierele de sistem (sau propria lucrare) în altă parte. opțiunea div id = „bf636723f6″>

, tar va arhivați căile absolute. Prin urmare, merită întotdeauna să verificați conținutul arhivelor mari înainte de a extrage.

Comentarii

  • --strip-components=N poate fi util pentru unii aici.
  • în cazul meu a fost necesar să scrieți ./foldername/ în loc de , cred că a fost pentru că atunci când am creat tarul l-am creat cu tar -cvf santi.tar ./* și când am " listat " tar asta este ceea ce a spus drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
  • Și despre .gz?
  • @PeterKrauss schimba -xvf în -xzvf (adăugând -z opțiune) și evident foo.tar la foo.tar.gz sau oricare arhiva dvs. este denumită. Același lucru este valabil pentru -j (bz2) și pentru unele versiuni recente, -J (xz). În caz contrar, funcționează și o conductă precum zcat foo.tar.gz | tar -xvf - ….
  • Și amintiți-vă, dacă v-ați săturat de toate rezultatele detaliate în timpul extracției, săriți v în toate exemplele. De exemplu, tar -tf foo.tar și tar -xf foo.tar ....

Lasă un răspuns

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