Hvordan udtrækker du en enkelt mappe fra et stort tar.gz-arkiv?

Jeg bruger denne kommando på en 5GB arkiv

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

er dette den rigtige måde at gøre dette på? Det ser ud til at tage for evigt uden kommandolinjeproduktion …

Kommentarer

  • Brugte du en absolut eller relativ sti? Bør være relativ, bortset fra at det ser rigtigt ud. Hvor længe lod du det køre, og hvor godt er dit system? Det tager mindst flere minutter på en hurtig maskine. Potentielt en time eller mere? Jeg ' kører nu en test.
  • Ja, den blev afsluttet efter ~ 1 time, men den absolutte sti var forkert, du var korrekt.
  • På Linux kan du se, hvor langt ind i arkivet tar er med cat /proc/$(pidof tar)/fdinfo/0 (tilpas kommandoen, hvis du har mere end en tar proces kører).
  • Den vigtige del er heller ikke noget skråstreg. Brug af folder/folder2/ vandt ' t arbejde.

Svar

tar gemmer relative stier som standard . GNU-tjære siger endda det, hvis du prøver at gemme en absolut sti:

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

Hvis du har brug for at udpakke en bestemt mappe, skal du se på, hvad der er i tar-filen:

tar -tvf foo.tar 

Og bemærk det nøjagtige filnavn. I tilfælde af min foo.tar -fil kunne jeg udtræk /home/foo/bar ved at sige:

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

Så nej, den måde, du sendte, er ikke (nødvendigvis) den korrekte måde at gøre det på. Du er nødt til at udelade det førende skråstreg. Hvis du vil simulere absolutte stier, skal du først cd / og sørge for at du er superbruger. Dette gør det samme:

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

Der er meget åbenlyse gode grunde til, at tar konverterer stier til relative. Den ene er evnen til at gendanne et arkiv andre steder end dets oprindelige kilde. andet er sikkerhed. Du kan udpakke et arkiv, forvente, at dets filer vises i din nuværende arbejdsmappe og i stedet overskrive systemfiler (eller dit eget arbejde) andre steder ved en fejltagelse.

Bemærk: hvis du bruger -P option, tar vil arkivere absolutte stier. Så det lønner sig altid at kontrollere indholdet af store arkiver, før du udpakker det.

Kommentarer

  • --strip-components=N kan være nyttigt for nogle her.
  • i mit tilfælde var det nødvendigt at skrive ./foldername/ i stedet for , jeg gætter på, at det var fordi da jeg oprettede tjæren, oprettede jeg den med tar -cvf santi.tar ./* og da jeg " angivet " tjæren dette er hvad den sagde drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
  • Og om .gz?
  • @PeterKrauss skift -xvf til -xzvf (tilføjelse af -z option) og åbenbart foo.tar til foo.tar.gz eller hvad dit arkiv hedder. Det samme gælder for -j (bz2) og i nogle nyere versioner -J (xz). Ellers fungerer en rørledning som zcat foo.tar.gz | tar -xvf - … også.
  • Og husk, hvis du er træt af al den detaljerede output under ekstraktion, skal du bare springe i alle eksemplerne. F.eks. tar -tf foo.tar og tar -xf foo.tar ....

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *