Hvordan trekker du ut en enkelt mappe fra et stort tar.gz-arkiv?

Jeg bruker denne kommandoen på en 5GB arkiv

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

er dette den riktige måten å gjøre dette på? Det ser ut til å ta evig tid uten kommandolinjeproduksjon …

Kommentarer

  • Brukte du en absolutt eller relativ bane? Bør være relativ, annet enn at det ser riktig ut. Hvor lenge lot du det kjøre, og hvor bra er systemet ditt? Det vil ta minst flere minutter på en rask maskin. Potensielt en time eller mer? Jeg ' kjører en test nå.
  • Ja, den fullførte etter ~ 1 time, men den absolutte banen var feil, du hadde rett.
  • På Linux kan du se hvor langt inn i arkivet tar er med cat /proc/$(pidof tar)/fdinfo/0 (tilpasse kommandoen hvis du har mer enn en tar prosess som kjører).
  • Den viktige delen er heller ingen etterfølgende skråstrek. Ved hjelp av folder/folder2/ vant ' t arbeid.

Svar

tar lagrer relative stier som standard . GNU tar sier det til og med hvis du prøver å lagre en absolutt bane:

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

Hvis du trenger å trekke ut en bestemt mappe, kan du se på hva som er i tar-filen:

tar -tvf foo.tar 

Og legg merke til det eksakte filnavnet. I tilfelle av foo.tar -filen min, kunne jeg trekk ut /home/foo/bar ved å si:

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

Så nei, måten du postet på, er ikke (nødvendigvis) riktig måte å gjøre det på. Du må utelate den ledende skråstrek. Hvis du vil simulere absolutte baner, gjør du først cd / og sørg for at du er superbruker. Dette gjør også det samme:

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

Det er veldig åpenbare, gode grunner til at tar konverterer stier til relative. Den ene er muligheten til å gjenopprette et arkiv andre steder enn den opprinnelige kilden. annet er sikkerhet. Du kan trekke ut et arkiv, forvente at filene vises i din nåværende arbeidskatalog, og i stedet overskrive systemfiler (eller ditt eget arbeid) andre steder ved en feiltakelse.

Merk: hvis du bruker -P alternativ, tar vil arkivere absolutte stier. Så det lønner seg alltid å sjekke innholdet i store arkiver før du trekker ut dem.

Kommentarer

  • --strip-components=N kan være nyttig for noen her.
  • i mitt tilfelle var det nødvendig å skrive ./foldername/ i stedet for , antar jeg at det var fordi da jeg opprettet tjæren, opprettet jeg den med tar -cvf santi.tar ./* og da jeg " oppført " tjæren dette er hva den sa drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
  • Og om .gz?
  • @PeterKrauss endre -xvf til -xzvf (legge til -z alternativ) og åpenbart foo.tar til foo.tar.gz eller hva arkivet ditt heter. Det samme gjelder -j (bz2) og i noen nyere versjoner -J (xz). Ellers fungerer også en rørledning som zcat foo.tar.gz | tar -xvf - ….
  • Og husk at hvis du er lei av all den detaljerte produksjonen under utvinning, er det bare å hoppe over v i alle eksemplene. F.eks. tar -tf foo.tar og tar -xf foo.tar ....

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *