it-swarm.com.de

So extrahieren Sie bestimmte Dateien aus tar.gz

Wie können wir bestimmte Dateien aus einer großen tar.gz-Datei extrahieren? Ich fand der Vorgang des Extrahierens von Dateien aus einem Teer in dieser Frage , aber als ich dort den genannten Befehl versuchte, bekam ich den Fehler:

$ tar --extract --file={test.tar.gz} {extract11}
tar: {test.tar.gz}: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now

Wie extrahiere ich dann eine Datei aus tar.gz?

122
Ankit Vashistha

Sie können auch tar -zxvf <tar filename> <file you want to extract> Verwenden.

Sie müssen den Dateinamen genau so schreiben, wie es tar ztf test.tar.gz Zeigt. Wenn es heißt, z. ./extract11 Oder some/bunch/of/dirs/extract11, Das müssen Sie angeben (und die Datei wird unter genau diesem Namen angezeigt, benötigte Verzeichnisse werden automatisch erstellt).

  • -x: Weist tar an, Dateien zu extrahieren.
  • -f: Gibt den Dateinamen/Tarballnamen an.
  • -v: Ausführlich (Fortschritt beim Extrahieren von Dateien anzeigen).
  • -z: Archiv durch gzip filtern, zum Dekomprimieren von .gz-Dateien verwenden.
140
harish.venkat

Nehmen wir an, Sie haben einen Tarball namens lotsofdata.tar.gz und Sie wissen nur, dass sich dort eine Datei befindet, die Sie möchten, aber Sie können sich nur daran erinnern, dass der Name das Wort contract enthält. Sie haben zwei Möglichkeiten:

Verwenden Sie entweder tar und grep, um den Inhalt Ihres Tarballs aufzulisten, damit Sie den vollständigen Pfad und Namen aller Dateien ermitteln können, die mit dem Ihnen bekannten Teil übereinstimmen, und verwenden Sie dann tar Um diese eine Datei jetzt zu extrahieren, kennen Sie die genauen Details, oder Sie können zwei wenig bekannte Schalter verwenden, um einfach alle Dateien zu extrahieren, die mit dem Wenigen übereinstimmen, das Sie über Ihren Dateinamen wissen - Sie müssen weder den vollständigen Namen noch einen kennen Teil seines Pfades für diese Option. Die Details sind:

Option 1

$ tar -tzf lotsofdata.tar.gz | grep contract

Dadurch werden die Details aller Dateien aufgelistet, deren Namen Ihr bekanntes Teil enthalten. Dann extrahieren Sie, was Sie wollen, indem Sie:

$ tar -xzf lotsofdata.tar.gz <full path and filename from your list above>

Sie brauchen möglicherweise ./ vor deinem Weg, damit es funktioniert.

Option 2

$ tar -xzf lotsofdata.tar.gz --wildcards --no-anchored '*contract*'

Bis zu Ihnen, was Sie einfacher oder am nützlichsten finden.

38
Wendy Cricks

Ich habe neulich versucht, ein paar hundert Dateien aus einem Tarball mit Tausenden von Dateien zu extrahieren. Die Dateien, die ich benötige, können nicht von einem einzelnen Platzhalter referenziert werden. Also habe ich gegoogelt und diese Seite gefunden.

Keiner der oben genannten Tricks scheint jedoch für meine Aufgabe gut zu sein. Am Ende las ich den Mann und fand diese Option --files-from, Also ist meine endgültige Lösung

gunzip < thousands.tar.gz | tar -x -v --files-from hundreds.list -f -

und es funktioniert wie ein Zauber.

pdate : Die Listendatei sollte das gleiche Format haben, wie Sie es von tar -tvf Sehen würden, sonst könnten Sie keine Dateien extrahieren.

8
JJ Tang

Nachfolgend finden Sie Beispiele zum Extrahieren bestimmter Dateien aus der Datei tar.gz.

Aus der lokalen Datei:

$ tar xvf file.tgz path/README.txt 2nd_file.txt

Von der Remote-URL:

$ curl -s http://example.com/file.tgz | tar xvf - path/README.txt 2nd_file.txt
3
kenorb

Ihr Beispiel funktioniert für mich, wenn Sie die geschweiften Klammern weglassen

$ tar --extract --file=test.tar.gz extract11

Wenn sich Ihre Datei extract11 in einem Unterordner befindet, sollten Sie den Pfad innerhalb des Tarballs angeben.

$ tar --extract --file=test.tar.gz subfolder/extract11
2
Bernhard