Hur extraherar du en enda mapp från ett stort tar.gz-arkiv?

Jag använder det här kommandot på en 5GB arkiv

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

är detta rätt sätt att göra detta? Det verkar ta en evighet utan kommandoradsutgång …

Kommentarer

  • Använde du en absolut eller relativ sökväg? Bör vara relativ, annat än att det ser rätt ut. Hur länge lät du det köras och hur bra är ditt system? Det tar minst flera minuter på en snabb maskin. Potentiellt en timme eller mer? Jag ' kör ett test nu.
  • Ja, det slutfördes efter ~ 1hr, men den absoluta sökvägen var fel, du hade rätt.
  • På Linux kan du se hur långt in i arkivet tar är med cat /proc/$(pidof tar)/fdinfo/0 (anpassa kommandot om du har mer än en tar processen körs).
  • Den viktiga delen är inte heller någon efterföljande snedstreck. Med folder/folder2/ vann ' t arbete.

Svar

tar lagrar relativa sökvägar som standard . GNU tjära säger till och med så om du försöker lagra en absolut sökväg:

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

Om du behöver extrahera en viss mapp, ta en titt på vad som finns i tarfilen:

tar -tvf foo.tar 

Och notera det exakta filnamnet. I fallet med min foo.tar -fil kunde jag extrahera /home/foo/bar genom att säga:

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

Så nej, det sätt du skrev upp är inte (nödvändigtvis) rätt sätt att göra det. Du måste utelämna det ledande snedstrecket. Om du vill simulera absoluta vägar, gör cd / först och se till att du är superanvändaren. Det gör också detsamma:

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

Det finns mycket uppenbara, goda skäl till varför tar konverterar banor till relativa. En är möjligheten att återställa ett arkiv på andra platser än dess ursprungliga källa. annat är säkerhet. Du kan extrahera ett arkiv, förvänta dig att filerna visas i din nuvarande arbetskatalog och istället skriva över systemfiler (eller ditt eget arbete) någon annanstans av misstag.

Obs! Om du använder -P alternativ, tar kommer arkivera absoluta vägar. Så det lönar sig alltid att kontrollera innehållet i stora arkiv innan du extraherar.

Kommentarer

  • --strip-components=N kan vara användbart för vissa här.
  • i mitt fall var det nödvändigt att skriva ./foldername/ istället för , antar jag att det berodde på att när jag skapade tjäran skapade jag den med tar -cvf santi.tar ./* och när jag " listade " tjäran det är vad den sa drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
  • Och om .gz?
  • @PeterKrauss ändra -xvf till -xzvf (lägga till -z -alternativ) och uppenbarligen foo.tar till foo.tar.gz eller vad ditt arkiv heter. Detsamma gäller för -j (bz2) och i vissa senaste versioner -J (xz). Annars fungerar också en pipeline som zcat foo.tar.gz | tar -xvf - ….
  • Och kom ihåg att om du är trött på all den detaljerade produktionen under extraktion hoppar du bara över v i alla exemplen. Exempelvis tar -tf foo.tar och tar -xf foo.tar ....

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *