aptitude
kann Sie mit seiner Suchfunktion den größten Teil des Weges erreichen. So finden Sie alles installiert, was nicht nur eine automatische Abhängigkeit war:
aptitude search -F "%p" "?installed ?not(?automatic)"
Dies ist nicht optimal. Einige davon können möglicherweise entfernt werden, aber ich kenne keinen einfachen Weg, um das herauszufinden. Vielleicht liegt die Antwort in man aptitude
.
Beim zweiten Gedanken könnten Sie mit dieser Liste eine Schleife durchlaufen und die abhängigen Pakete (nicht Abhängigkeiten) für jedes einzelne finden. Wenn sich eines davon in der Hauptliste befindet, entfernen Sie das aktuelle Paket aus der Liste ... aber erst, nachdem Sie die gesamte Liste analysiert haben, oder Sie werden Zwischenprodukte in einem Dep-Baum der Stufe 3+ verpassen.
Sie finden abhängige Personen mit einer Abfrage wie dieser:
aptitude search '~i~Dpackage'
Ich würde versuchen, das Skript zu schreiben, aber ich schreibe es auf einer winzigen Telefontastatur. Auch ich habe Grenzen.
Bearbeiten: Nachdem ich fünf Minuten lang versucht hatte zu schlafen, fing ich an, mich darauf einzulassen. so etwas sollte den Job machen:
orig=$(aptitude search -F "%p" "?installed ?not(?automatic)")
newlist="";
for p in $orig; do
depended=0;
for dependant in `aptitude search -F "%p" "~i~D$p"`; do
if [[ $orig == "* $dependant *" ]]; then
depended=1;
fi;
done;
if [[ $depended == 0 ]]; then
newlist="$newlist $p";
fi;
done;
echo $newlist
Beachten Sie, dass die Ausführung sehr lange dauert und möglicherweise zu intensiv ist (z. B. werden manuell entfernte Elemente entfernt, die manuell installiert werden sollen, wenn sie von etwas anderem in der $ orig-Liste abhängen, das Sie verwenden vielleicht später installiert).