Como canalizar pacotes instalados para o apt-cache?

2

Estou tentando obter uma descrição do pacote dos meus pacotes instalados.

Ficaria assim:

sudo apt list --installed | sed 's/\/.*//' | apt-cache search {} \;

O problema é enviar cada linha do sed para o apt-cache. Alguma sugestão?

    
por Soleil 22.05.2018 / 15:11

1 resposta

3

A sintaxe {} \; que você adivinhou é específica do comando find e não funcionará neste contexto. Você poderia usar xargs ex.

apt list --installed | sed 's/\/.*//' | xargs -n1 apt-cache search

Na verdade, o xargs tem sua própria sintaxe semelhante a {} que você pode usar aqui, por exemplo

. . . | xargs -n1 -I{} apt-cache search {}

embora seja redundante neste caso (é útil para casos em que você deseja substituir o valor enviado em um ponto diferente do final do comando).

No entanto, o comando apt-cache search quase certamente não é o que você deseja aqui - ele pesquisará todo o catálogo (on-line) dos pacotes que correspondem a cada um dos resultados de apt list --installed . Mesmo se você restringir o escopo da pesquisa usando --names-only , ainda obterá muitos falsos positivos (ou seja, correspondências de substring entre pacotes que são instalados e pacotes que não são AREN'T). Também será terrivelmente ineficiente.

Para esta tarefa específica eu pulo apt e uso o comando dpkg-query de nível inferior ex.

dpkg-query -W -f='${binary:Package}: ${binary:Summary}\n'

, que será muito mais eficiente (apenas percorrerá a lista de pacotes uma vez) e será estritamente limitado ao catálogo de pacotes locais.

Se você quiser limitar a saída a pacotes atualmente instalados, adicione o campo db:Status-Abbrev e filtre por exemplo.

dpkg-query -W -f='${db:Status-Abbrev}\t${binary:Package} - ${binary:Summary}\n' | 
  awk '/^ii/'

ou

dpkg-query -W -f='${db:Status-Abbrev}\t${binary:Package} - ${binary:Summary}\n' | 
  awk -F'\t' '/^ii/ {print $2}'
    
por steeldriver 22.05.2018 / 15:29