Finden Sie eine Datei in einem tar.gz-Archiv


12

Ist es möglich, den findBefehl so zu verwenden, dass die Dateien in einem tar.gz-Archiv auch mit Platzhaltern durchsucht werden?

mögen

find archive.tar.gz --name *foo*

Antworten:


17

Wie wäre es einfach:

$ tar tf archive.tar.gz | grep foo

listet das nicht einfach alle dateien auf?
Klemme

@clamp Ja, wenn Sie mit jeder Datei etwas anfangen möchten, leiten Sie diese Ausgabe einfach an einen anderen Befehl weiter.

Vielen Dank! Entschuldigung, aber ich bin ein Neuling in Unix. Ich habe versucht: tar tf graphics.tar.gz | find . --name *space*aber es heißtunkown predicate --name
Klemme

@clamp- findArgumente nehmen nur einen Gedankenstrich ein, aber da es sich um eine Liste von Dateien auf stdin handelt, möchten Sie grepstattdessen wie in Hesses Beispielcode verwenden. Versuchen Sietar tf graphics.tar.gz | grep 'space'
Kevin

1
grep *foo*ist kein gültiger regulärer Ausdruck. gregversteht keine Globs, sondern reguläre Ausdrücke. Versuchen Sie es grep foostattdessen.
Alexios

3

Hängen Sie das Archiv als Verzeichnis ein. Sie können dies mit dem AVFS- Dateisystem tun, mit dem Sie auf jedes Archiv als Verzeichnis zugreifen können, dessen Name nachgestellt ist #.

mountavfs
cd ~/.avfs$PWD
find archive.tar.gz\# -name '*foo*'

funktioniert nicht für gzip
van abel

@vanabel Eine gzip-Datei enthält keine anderen Dateien. Es ist nur eine Datei, komprimiert. Es gibt also kein „Inneres“, in dem man suchen könnte.
Gilles 'SO - hör auf, böse

1

Ich denke, es funktioniert ohne Pipe und Grep.

so was: tar tvf archive.tar.gz "foo"

Auf diese Weise funktionieren auch Globs.

tar tvf archive.tar.gz "*.foo"

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.