Inspecione (rpm -qp) vários arquivos RPM, cada um agrupado em arquivos TAR diferentes

Inspecione (rpm -qp) vários arquivos RPM, cada um agrupado em arquivos TAR diferentes

Eu queria saber quais são as melhores soluções possíveis para extrair cada arquivo RPM de uma lista de pacotes TAR e obter as informações do pacote desses arquivos.

Então, eu tenho uma lista de pacotes tar em um diretório, contendo pelo menos um RPM. Para estes, tentei a solução mais simples para fazer um loop, extrair e, em seguida, atingir o pico em cada pacote RPM usando um script bash, o que está demorando uma quantidade significativa de tempo, já que os pacotes TAR têm mais de 20 anos.

Também tentei a extração em massa usando cat *.tar | tar -xvf - -i, rpm -qp #list of filespara obter os nomes dos pacotes, o que me proporcionou uma melhoria em relação à minha última abordagem.

Eu sei que poderia espiar o pacote TAR e obter o nome do arquivo .rpm, mas como o nome do arquivo que contém um pacote não tem nada a ver com o nome do pacote, preciso verificar o pacote RPM também.

A solução mais próxima que pude tentar foi:

# 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

o que é muito rápido, mas não fornece informações corretas se um pacote TAR contém mais de um arquivo RPM.

Então, o que estou perguntando é:

  • Posso extrair em massa todos os arquivos TAR para stdout e espiar os arquivos RPM?
  • Posso realizar esta operação sem extrair os arquivos do pacote TAR?
  • Como posso modificar o comando acima para funcionar com um único pacote TAR contendo vários RPM?

Responder1

Dado que o rpmcomando pode processar corretamente um arquivo stdine falhar quando há vários arquivos envolvidos, a abordagem a seguir é uma solução potencial.

Com GNU tar, você pode usar a --to-commandopção de enviar o conteúdo de cada arquivo para o rpmcomando.

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

Demanual:

--to-command=command

Extraia arquivos e canalize seu conteúdo para a entrada padrão decomando. Quando esta opção é usada, em vez de criar os arquivos especificados, tar invocacomandoe direciona o conteúdo dos arquivos para sua saída padrão. Ocomandopode conter argumentos de linha de comando (consulte Executando comandos externos, para obter mais detalhes).

Notar quecomandoé executado uma vez para cada arquivo regular extraído. Arquivos não regulares (diretórios, etc.) são ignorados quando esta opção é usada.

informação relacionada