如何从命令行获取存储库部分中所有包的列表?

在Synaptic中,可以按部分列出包。 例如,在下图中列出了“业余无线电(宇宙)”部分的所有包。

如何在命令行中获取这样的列表(编辑:包描述)?

我需要一份原始清单; 像aptitude这样的终端应用程序不会这样做。

突触

好吧,虽然你说你不想因为输出而使用aptitude,你需要知道你可以修改它来得到你喜欢的东西:

 aptitude -F'|%p|%d|' search '?section(hamradio)' 

诀窍是在-F开关中修改输出格式。 %p表示包裹。 当包具有各种体系结构(即amd64 vs i386)和输出描述的%d ,这也会输出。 您可以对搜索模式进行个性化设置,例如未安装的软件包:

 aptitude -F'|%p|%d|' search '?section(hamradio) !~i' 

哪里~i意思是安装和! 是不是,所以它读作“not(!)installed(~i)”,或者你只想要你的架构可用的那些:

 aptitude -F'|%p|%d|' search '?section(hamradio) ~r native' 

~r?architecture() ,它匹配包的体系结构和native ,它只列出与系统具有相同体系结构的体系结构,相当于dpkg --print-architecture

因此,上一行可以更简洁地写成:

 aptitude -F'|%p|%d|' search '~s hamradio ~r native' 

确保dctrl-tools 安装dctrl-tools 包已安装。 它提供了用于搜索apt和dpkg包列表的有用命令。 要获得可以使用apt安装的特定部分中的所有包的完整描述,请运行

 grep-aptavail -F Section hamradio 

这将显示hamradio部分中每个包的完整包元数据。 如果您只想查看包名称,请运行

 grep-aptavail -n -F Section -s Package hamradio 

如果您的系统设置为multiarch,则如果该系统是针对多个体系结构构建的,则此列表中可能会出现多次。 因此,要进一步改进,请使用其中之一

 grep-aptavail -n -F Section -s Package hamradio | sort | uniq 

要么

 grep-aptavail -n -F Section -s Package hamradio | sort -u 

对包列表进行排序并删除具有相同名称的重复包。

请注意,您必须使用该部分的实际名称,这与Synaptic在其GUI中显示的“人类可读”名称不同。 例如,上面的搜索使用部分名称hamradio而不是Synaptic中显示的字符串“Amateur Ra​​dio”。

有关所有选项和一些示例的完整说明,请参阅grep-aptavail的手册页。

单行上的更多字段,带有任意分隔符

以下单行将在一行中打印存储库部分的所有唯一包名及其描述。 所有字段都由管道字符分隔,即准备转换为Markdown管道表 。 结果表可以在我的网站上找到。

 grep-aptavail -n -s Package,Description -F Section hamradio |paste -sd '||\n' |sed 's:^:|:' |sort -u 

您可以使用以下命令获取属于给定Section的包列表:

 $ dpkg-query -W -f='${binary:Package} ${Section}\n' | awk '{if ($2 == "shells") {print $1}}' bash bash-completion busybox-initramfs busybox-static dash zsh zsh-common