É um pouco sobre brincar com consultas zypper.
1) Encontre os pacotes instalados, que vêm de repositórios de distribuição que não são opensuse:
zypper search -s | grep "i |" | grep -vi "| patch" | grep -vi "| opensuse" > list1.txt
2) Encontre pacotes, que estão disponíveis em repositórios opensuse (não importando se estão instalados ou não):
zypper search -s | grep "v |" | grep -vi "| patch" | grep -i "| opensuse" > list2.txt
3) Identifique os pacotes da lista1, que não estão representados na lista2:
cat list1.txt | cut -d " " -f3 | cut -d " " -f1 | while read line
do
if [ "$(cat list2.txt | grep -i $line)" = "" ]; then
echo "$line"
fi
done
Isso deve resolver o caso (testado no openSUSE 11.3).