O seguinte comando retorna o nome do pacote e seu ppa (se instalado a partir de um ppa):
apt-cache policy $(dpkg --get-selections | grep -v deinstall$ | awk '{ print $1 }') | perl -e '@a = <>; $a=join("", @a); $a =~ s/\n(\S)/\n\n$1/g; @packages = split("\n\n", $a); foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}'
Detalhes:
-
dpkg --get-selectionsfornece apenas os pacotes instalados apósgrep -v deinstall$ -
awk '{ print $1 }'retorna apenas o nome do pacote -
perl -e '@a = <>; $a=join("", @a)'concatena todas as linhas retornadas porapt-cache policy -
$a =~ s/\n(\S)/\n\n$1/g;adiciona uma nova linha entre cada seção do pacote -
@packages = split("\n\n", $a);é uma matriz perl contendo todos os pacotes infos, um pacote por item. -
foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}é um loop onde o pacote e o ppa são impressos se um ppa com o prio 500 for encontrado na política.