如何将“dpkg --get-selections”过滤为仅存储库中可用的包?

Rya*_*son 9 package-management dpkg

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

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

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

tum*_*eed 9

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

这里的问题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
Run Code Online (Sandbox Code Playgroud)