Hoe extraheer je een enkele map uit een groot tar.gz-archief?

Ik gebruik deze opdracht op een 5GB archive

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

is dit de juiste manier om dit te doen? Het lijkt eeuwig te duren zonder opdrachtregeluitvoer …

Opmerkingen

  • Heb je een absoluut of relatief pad gebruikt? Moet relatief zijn, behalve dat het er goed uitziet. Hoe lang heb je het laten draaien en hoe goed is je systeem? Het duurt minstens enkele minuten op een snelle machine. Potentieel een uur of meer? Ik ' voer nu een test uit.
  • Ja, het is voltooid na ~ 1 uur, maar het absolute pad was verkeerd, je had gelijk.
  • Op Linux kun je zien hoever in het archief tar zit met cat /proc/$(pidof tar)/fdinfo/0 (pas het commando aan als je er meer dan één hebt tar proces wordt uitgevoerd).
  • Het belangrijkste deel is ook geen slash achteraan. Het gebruik van folder/folder2/ heeft ' geen werk opgeleverd.

Antwoord

tar slaat relatieve paden standaard op. GNU tar zegt het zelfs als je een absoluut pad probeert op te slaan:

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

Als je een bepaalde map moet uitpakken, kijk dan wat er in het tar-bestand:

tar -tvf foo.tar 

En noteer de exacte bestandsnaam. In het geval van mijn foo.tar -bestand, zou ik extraheer /home/foo/bar door te zeggen:

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

Dus nee, de manier waarop je iets postte is niet (noodzakelijkerwijs) correct manier om het te doen. Je moet de eerste schuine streep weglaten. Als je absolute paden wilt simuleren, doe dan eerst cd / en zorg ervoor dat je “de supergebruiker bent. Dit doet ook hetzelfde:

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

Er zijn zeer voor de hand liggende, goede redenen waarom tar paden converteert naar relatieve. Een daarvan is de mogelijkheid om een archief te herstellen op andere plaatsen dan de oorspronkelijke bron. De een ander is beveiliging. Je zou een archief kunnen uitpakken, verwachten dat de bestanden in je huidige werkdirectory verschijnen, en in plaats daarvan per ongeluk systeembestanden (of je eigen werk) ergens anders overschrijven.

Opmerking: als je de -P optie, tar zal archiveer absolute paden. Het loont dus altijd om de inhoud van grote archieven te controleren voordat u ze uitpakt.

Opmerkingen

  • --strip-components=N kan hier voor sommigen nuttig zijn.
  • in mijn geval was het nodig om ./foldername/ te schrijven in plaats van , ik denk dat het kwam doordat ik de tar creëerde met tar -cvf santi.tar ./* en toen ik " vermeld " de tar dit is wat het zei drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
  • En over .gz?
  • @PeterKrauss verander -xvf in -xzvf (door de -z optie) en uiteraard foo.tar tot foo.tar.gz of hoe je archief ook heet. Hetzelfde geldt voor -j (bz2) en voor sommige recente versies -J (xz). Anders werkt een pijplijn zoals zcat foo.tar.gz | tar -xvf - … ook.
  • En onthoud, als je moe bent van alle uitgebreide uitvoer tijdens het extraheren, sla dan de in alle voorbeelden. Bijv. tar -tf foo.tar en tar -xf foo.tar ....

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *