我如何过滤“dpkg --get-selections”以仅显示存储库中可用的包?

我如何过滤“dpkg --get-selections”以仅显示存储库中可用的包?

我想获取一个系统上安装的软件包列表,并将它们全部安装在另一个系统上。

我知道这可以给我一个所有已安装包的列表,我可以在目标系统上将其dpkg --get-selections导入。但是,有些已安装的包是我在本地自己构建的(例如使用 checkinstall),并且无法从存储库中找到。当无法在存储库中找到这些包时,该过程将失败。dpkg --set-selectionsdpkg --set-selections

那么有没有办法可以过滤生成的列表,dpkg --get-selections以便它只包含当前安装的版本在我当前的存储库中可用吗?

答案1

我相信软件中心现在有一项功能,可以在计算机之间同步。如果该功能可以正确处理丢失的软件包,那么它就可以解决您的问题。

这里的问题是dpkg无法识别存储库,只能识别已安装的软件包。您可以通过运行 来查看存储库中是否有软件包apt-cache policy $package。如果您在 中看到存储库Version Table,则表示该软件包可用。

那么,这个怎么样?虽然很慢,但应该可以工作:

dpkg --get-selections '*' \
  | while read line; do
    apt-cache policy $(echo "$line" | cut -f1 ) \
      | grep -q 'http://' \
      && echo "$line"
done

答案2

使用以下命令

dpkg --get-selections > installed-software

它将在你的主目录中创建一个名为installed-software的文件

在新系统上

dpkg --set-selections < installed-software

这将读取选择并安装

相关内容