df8oe schrieb
ich hatte es schon fast befürchtet dass es keinen solchen Parameter gibt (das wäre vielleicht eine Enhancement-Bitte an die Maintainer...).
Hier liest sicher keiner der pacman-Entwickler mit, wenn es dir wichtig wäre schreibe einen Bug-/Feature-Report zu pacman im Bugtracker.
@wirr
Bei deinem Beispiel würde eine Deinstallation aber immer noch an der weiterhin existierenden Fehlermeldung scheitern:
$ pacman -Rp $(pacman -Qq mc nnn)
Fehler: Paket 'nnn' wurde nicht gefunden
mc-4.8.23-1
#besser IMHO
$ pacman -Rp $(pacman -Qq mc nnn 2>/dev/null)
mc-4.8.23-1
Ein Ansatz so für den OP wäre ggf:
$ cat big
mc
nnn
$ pacman -Rp $(cat big | pacman -Qq - 2>/dev/null)
mc-4.8.23-1
Würde also aus der "großen" Liste big nur die Pakete deinstallieren, die auch vorhanden sind. Ist allerdings IMHO sehr unsauber und ggf. risikobehaftet.
Ich würde wohl eher mit einer Paketliste und Arrays arbeiten, also versuchen bei pacman mit so wenig (auch unterdrückten) Fehlermeldungen auszukommen. Also das Array so aufzubereiten daß der lokale pacman zufrieden ist.
Ansatz (mit ruby, wg. einfacher Array-Behandlung):
$ ruby -e "puts IO.popen('pacman -Ssq').readlines & IO.popen('pacman -Qq').readlines"
Beide popen-Aufrufe erzeugen jeweils ein Array, aus diesen wird durch "&" ein neues Array erzeugt welches (unique) nur die Elemente enthält die in *beiden* Arrays vorhanden sind.
Daraus ließe sich dann als Ansatz folgender Einzeiler machen:
$ cat big
mc
nnn
zim
zom
$ pacman -Rp $(ruby -e "puts IO.popen('cat big').readlines & IO.popen('pacman -Qq').readlines")
zim-0.72.0-2
mc-4.8.23-1
Würde also aus der großen Liste (big) nur die Pakete an pacman -R übergeben, die auch auf dem System installiert sind. Hier also nur den mc und zim deinstallieren, den nnn und zom habe ich nicht.