如何列出 APT 软件包将安装的所有文件?

如何列出 APT 软件包将安装的所有文件?

这类似于如何列出 APT 软件包已安装的所有文件?不过我想知道哪些文件将要由于该软件包尚未安装,因此需要安装。

例子:我想列出 APT 包将安装的所有文件xorg。换句话说:当我键入 时可能会创建的所有文件apt install xorg。但是,仅列出了- 而不是其依赖项apt-file的直接文件:xorg

$ apt-file list xorg
xorg: /usr/share/bug/xorg/script
xorg: /usr/share/doc/xorg/changelog.gz
xorg: /usr/share/doc/xorg/copyright
xorg: /usr/share/lintian/overrides/xorg

我怎样才能列出全部相关文件?

(我将添加一个糟糕的bash管道组合作为答案。这就是我现在正在使用的,但它只是一个包含许多调用的循环apt-file,因此非常非常慢。我正在寻找更好的答案。)

答案1

您可以apt-file list使用以下命令一次性提供要处理的包列表

apt-file -f-

(从标准输入读取)。我的测量表明

apt-get -s install xorg | awk '/^Inst / { print $2 }' | apt-file -f- list

比带有循环的相同进程快两倍多apt-file(使用xargs)。

我对它进行了后处理,sort -k2,2因为我很喜欢看到所涉及的包。

使用apt-get -s install而不是后处理apt-cache depends xorg意味着将考虑系统上安装的所有包,并且仅考虑那些包,包括递归依赖项。apt-cache depends xorg仅显示xorg的直接依赖关系,并且您的后处理不处理替代方案。

答案2

这就是我现在正在使用的,但它可能有问题,而且性能肯定不是很高:

apt-cache depends xorg | grep '..\(Depends\|Recommends\): [^<]' | sed 's/[^:]*: //' | while read LINE; do [[ -z "$LINE" ]] || apt-file list "$LINE"; done | sed 's/[^:]*: //' | sort

一步步:

获取将要安装的软件包列表:

apt-cache depends xorg

选择“取决于”和“推荐”条目:

grep '..\(Depends\|Recommends\): [^<]'

删除除包名称之外的所有内容:

sed 's/[^:]*: //'

如果该行不为空,请apt-file使用每个包名称运行:

while read LINE; do [[ -z "$LINE" ]] || apt-file list "$LINE"; done

apt-file list返回每行以文件的相应包名称开头的行。从行中删除包名称,只留下文件名:

sed 's/[^:]*: //'

排序行:

sort

相关内容