PPA 春季大扫除 --- 列出从 PPA 安装的软件包?

PPA 春季大扫除 --- 列出从 PPA 安装的软件包?

这是一篇问答式的文章 --- 希望在新 LTS 版本发布期间为您提供帮助。这篇文章中有很多链接,请关注并点赞,以给予作者相应的赞誉。

通常建议移除或清除在进行版本升级时,我经常会遇到很多麻烦,无法记住安装了哪些 PPA 以及哪些软件包属于特定 PPA --- 您有时会安装一个 PPA,但这并不意味着您已经安装了其中的所有软件包。

PPA 列表如下:有很多不错的剧本;并且发现从 PPA 真正安装的软件包您可以使用apt-cache policy或类似的命令。

但是 --- 是否有一个一站式脚本可以列出您安装的所有 PPA 以及从中安装的所有软件包?

答案1

以下脚本将为您提供如下列表:

PPA:tualatrix/ppa
--->  ubuntu-tweak
PPA:otto-kesselgulasch/gimp
--->  gimp
--->  gimp-data
--->  gimp-help-common
--->  gimp-help-en
--->  gimp-help-en-gb
--->  gimp-help-es
--->  gimp-help-it
--->  gimp-plugin-registry
--->  libgimp2.0
--->  libopenjpeg-dev
--->  libopenjpeg5

脚本如下(将其复制到文件并使其可执行):

#! /bin/bash
#
list_all_packages_repos() {
apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') |
  awk '/^[^ ]/    { split($1, a, ":"); pkg = a[1] }
    nextline == 1 { nextline = 0; printf("%-40s %-50s %s\n", pkg, $2, $3) }
    /\*\*\*/      { nextline = 1 }'
    }

list_packages_of() { #1 is the tmpfile, $2 is the ppa regexp
    grep "$2" "$1" | awk '{print "---> ", $1}'
}

# cache all packages files now 

tmpfile=/tmp/list_pcks.$$.txt
list_all_packages_repos > $tmpfile

# listppa Script to get all the PPA installed on a system ready to share for reininstall
for APT in $(find /etc/apt/ -name "*.list"); do
    grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" "$APT" | while read ENTRY ; do
        USER=$(echo "$ENTRY" | cut -d/ -f4)
        PPA=$(echo "$ENTRY" | cut -d/ -f5)
        echo  PPA:$USER/$PPA
    list_packages_of "$tmpfile" "$USER/$PPA"
    done
done

rm "$tmpfile"

相关内容