如何获取所有包的完整文件列表?

如何获取所有包的完整文件列表?

我尝试使用apt-file list --regexp ".*",但是没有用,可能是因为返回的内容太多了。

答案1

您可以使用命令获取所有软件包的文件列表,apt-file list --regexp ".*"但这需要花费一些时间来收集所有文件的列表。该命令的手册页中提到了这一点apt-file

       -x, --regexp
       Treat pattern as a (perl) regular expression. See perlreref(1) for
       details. Without this option, pattern is treated as a literal
       string to search for.

       Be advised that this option can be rather slow.  If performance is
       an issue, consider giving apt-file non-regex pattern matching too
       much and pipe the output to perl -ne '/<pattern-here>/'.  This
       enables apt-file to use more optimizations and leaves less work to
       the "slower" regex.

提取所有已安装包的文件列表的另一种方法是使用以下命令:

for package in $(apt list --installed| awk -F"/" '{print $1}'); do
  dpkg --listfiles "$package";
done

您可以根据您的要求调整输出。

如果您想要从 apt db 中提取所有软件包的文件列表,则应使用以下命令,apt-file这将花费一些时间,因为 apt db 中通常有数千个软件包(取决于配置的存储库),因此需要列出数百万个文件。您可以使用以下任一命令:

apt list | awk -F"/" '{print $1}' > package_list
apt-file list -f package_list

或者

apt-file list --regexp ".*"

答案2

上市的另一种选择APT 缓存中所有包中的所有文件,正如@nightWolf 的建议所利用的apt,这在脚本中并不好......

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

#!/bin/bash

for package in $( \
  apt-cache dump \
    | grep -e "^Package" \
    | awk '{print $2}' \
    | sort )
do
  apt-file list "$package";
done

再次,无论你如何尝试,这个任务都很慢。APT 缓存数据库是存在的,并且有执行所有相关搜索的工具。将这些信息转储为文本似乎没有用。

相关内容