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}'