从包含 apt list --installed 输出的文件安装

Gig*_*e 2 7 package-management command-line apt bash

apt list --installed我有一个文件,其中包含另一台机器的输出。

IE

accountsservice-ubuntu-schemas/focal,focal,now 0.0.7+17.10.20170922-0ubuntu1 all [installed,automatic]
accountsservice/focal-updates,focal-security,now 0.6.55-0ubuntu12~20.04.5 amd64 [installed,automatic]
acl/focal,now 2.2.53-6 amd64 [installed,automatic]
Run Code Online (Sandbox Code Playgroud)

...等等。

有没有一种简单的方法可以使用上述文件和命令行来安装这些软件包?

mur*_*uru 7

您可以提取第一个之前的部分/并使用它xargs来安装apt

xargs -a <(awk -F/ '{print $1}' some-file) apt install
Run Code Online (Sandbox Code Playgroud)

或者:

awk -F/ '{print $1}' some-file | xargs apt install -y
Run Code Online (Sandbox Code Playgroud)


N0r*_*ert 6

APT 明确声明不适合与脚本一起使用:

脚本用法以及与其他 APT 工具的差异
apt (8) 命令行被设计为最终用户工具,它可能会更改版本之间的行为虽然它试图不破坏向后兼容性,但如果更改看起来有利于交互使用,则不能保证这一点。

apt (8)的所有功能也可在apt-get (8) 和apt-cache (8) 等 专用 APT 工具中使用。apt (8) 只是更改某些选项的默认值(请参阅apt.conf (5),特别是二进制范围)。因此,您应该更喜欢在脚本中使用这些命令(可能启用一些附加选项),因为它们尽可能保持向后兼容性。

您使用了错误的工具。更好的方法是使用dpkg自身:

dpkg -l | awk '$1 == "ii" {print $2}' > installed
sudo apt-get install $(cat installed)
Run Code Online (Sandbox Code Playgroud)

细节:

顺便说一句,这种方法看起来心胸狭隘(就像在社区的这个伟大指南中一样)。您将丢失大量信息 - 软件包来源及其 GPG 密钥。
此外,此方法将在第一次出现本地安装的软件包或从第二台计算机上不存在的某些 PPA 安装的软件包时失败。


如果您想要全包服务 - 请尝试我的名为(Ubuntu 和 Debian 的保存/恢复软件列表脚本)的python 脚本srslsud
它将保存所有 APT 存储库及其 GPG 密钥;将 Snap、Flatpaks 和 Ubuntu Make 应用程序列表从第一台计算机转换为 JSON 文件。
然后,您可以在第二台计算机上使用相同的 JSON 文件恢复此列表。