这类似于如何列出 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