Untersuchen Sie (rpm -qp) mehrere RPM-Dateien, die jeweils in unterschiedlichen TAR-Dateien gebündelt sind.

Untersuchen Sie (rpm -qp) mehrere RPM-Dateien, die jeweils in unterschiedlichen TAR-Dateien gebündelt sind.

Ich habe mich gefragt, welche die beste Lösung wäre, um die einzelnen RPM-Dateien aus einer Liste von TAR-Paketen zu extrahieren und die Paketinformationen aus diesen Dateien abzurufen.

Ich habe also eine Liste von Tar-Paketen in einem Verzeichnis, die mindestens ein RPM enthalten. Für diese habe ich die einfachste Lösung ausprobiert, nämlich mit einem Bash-Skript jedes RPM-Paket zu durchlaufen, zu extrahieren und dann einen Blick darauf zu werfen. Das nimmt viel Zeit in Anspruch, da es über 20 TAR-Pakete gibt.

Ich habe auch eine Massenextraktion versucht cat *.tar | tar -xvf - -i, um dann rpm -qp #list of filesdie Paketnamen abzurufen, was eine Verbesserung gegenüber meinem letzten Ansatz darstellte.

Ich weiß, dass ich einen Blick in das TAR-Paket werfen und den Namen der .rpm-Datei abrufen könnte, aber da der Name der Datei, die ein Paket enthält, nichts mit dem Namen des Pakets zu tun hat, muss ich auch das RPM-Paket überprüfen.

Die beste Lösung, die ich versuchen konnte, war:

# given tarball-containing-wget-rpm-package.tar.gz contains wget.rpm 

bash$ time (cat tarball-containing-wget-rpm-package.tar.gz|gunzip|tar --wildcards --extract '*.rpm' --to-stdout|rpm -qp /dev/stdin)
wget-1.11.4-1.40.1

real    0m0.049s
user    0m0.044s
sys     0m0.004s

Das ist ziemlich schnell, liefert aber keine richtigen Informationen, wenn ein TAR-Paket mehr als eine RPM-Datei enthält.

Meine Frage ist also:

  • Kann ich alle TAR-Dateien in einem Massenvorgang in die Standardausgabe extrahieren und dann einen Blick auf die RPM-Dateien werfen?
  • Kann ich diesen Vorgang durchführen, ohne die Dateien aus dem TAR-Paket zu extrahieren?
  • Wie kann ich den obigen Befehl ändern, damit er mit einem einzelnen TAR-Paket funktioniert, das mehrere RPM enthält?

Antwort1

Da der rpmBefehl eine Datei korrekt verarbeiten kann, stdinaber fehlschlägt, wenn mehrere Dateien beteiligt sind, ist der folgende Ansatz eine mögliche Lösung.

Mit GNU tarkönnen Sie die --to-commandOption verwenden, den Inhalt jeder Datei an den rpmBefehl zu senden.

tar -zf tarball.gz --wildcards --extract '*.rpm' --to-command='rpm -qp /dev/stdin'

Von demHandbuch:

--to-command=command

Extrahieren Sie Dateien und leiten Sie deren Inhalt an die Standardeingabe von weiter.BefehlWenn diese Option verwendet wird, ruft tar statt der angegebenen DateienBefehlund leitet den Inhalt der Dateien an seine Standardausgabe weiter.Befehlkann Befehlszeilenargumente enthalten (weitere Einzelheiten finden Sie unter „Ausführen externer Befehle“).

Beachte dasBefehlwird einmal für jede extrahierte reguläre Datei ausgeführt. Nicht reguläre Dateien (Verzeichnisse usw.) werden bei Verwendung dieser Option ignoriert.

verwandte Informationen