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-selections
fornece 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.