获取可用包的名称和版本到文本文件 - 每个包的名称和版本仅在同一行

ede*_*esz 6 command-line apt

我正在寻找一个文本文件,其中包含一些可用软件包及其最新版本的列表。我需要在同一行中包含包名称及其最新版本。

试图

目前,我可以获得单个包的版本号:

示例 1:

apt-cache show python-numpy | grep Version
Run Code Online (Sandbox Code Playgroud)

这给了我 1 行输出:

Version: 1:1.8.2-2
Run Code Online (Sandbox Code Playgroud)

例子2:

apt-cache show mysql-server | grep Version
Run Code Online (Sandbox Code Playgroud)

这给了我 1 行输出:

Version: 5.5.44-0+deb8ul
Run Code Online (Sandbox Code Playgroud)

问题

我感兴趣的包不止一个。

要求

我正在寻找的是包名称和版本 - 我想要这种格式:

python-numpy 1.8.2-2
mysql-server 5.5.44-0
python-six 1.8.0-1
python-wheel 0.24.0-1
apache2 2.4.10-10
python-urllib3 1.9.1-3
python-setuptools 5.5.1-1
Run Code Online (Sandbox Code Playgroud)

如果可能,我希望将这 6 行写入“Output.txt”。如果不可能在同一个文件中获得所有这些行,那么我只想python-numpy 1.8.2-2在输出文件中获得上面的第一行。

题:

目前,我可以单独获取每个包的名称和版本。但是,有没有办法自动执行此过程并一次性完成所有操作?

编辑:

我正在寻找的唯一包是:

python-wheel
python-numpy
mysql-server
python-setuptools
python-six
apache2
python-urllib3
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 8

如果您有一个包列表(例如,在名为 的文件中input,每行一个),那么您可以执行以下操作:

while read package
do
    echo $package "$(apt-cache show $package | awk '/Version/{print $2}')"
done < input > Output.txt
Run Code Online (Sandbox Code Playgroud)


ste*_*ver 5

在对aptitude文档(包括这个 Debian aptitude search term reference )进行了一番争论之后,我设法想出了这个丑陋的单行程序

aptitude -F '%p %V' --group-by=none --sort=name,~version versions \
  ?exact-name\({python-numpy,mysql-server,python-six,python-wheel,apache2,python-urllib3,python-setuptools}\) \
  | sort -uk1,1
Run Code Online (Sandbox Code Playgroud)
  • -F '%p %V'将输出格式化为包名,然后是候选版本
  • --sort=name,~version按包名和版本降序排序,以便我们可以sort -u用来浏览最新的
  • ?exact-name()防止搜索被扩展以包括诸如mysql-server-5.5formysql-server

请注意要检查的包列表的丑陋括号扩展:似乎没有像全局-oAptitude::Some::Param=true强制执行这样的选项?exact-name()


FWIW 该apt-show-versions实用程序似乎只需 10% 的努力即可完成 90% 的工作:以下是您在我的 14.04.3 系统上提到的软件包的结果:

$ aptitude -F '%p %V' --group-by=none --sort=name,~version versions \
  ?exact-name\({python-numpy,mysql-server,python-six,python-wheel,apache2,python-urllib3,python-setuptools}\) \
  | sort -uk1,1
apache2 2.4.7-1ubuntu4.8                                                        
mysql-server 5.5.46-0ubuntu0.14.04.2                                            
python-numpy 1:1.8.2-0ubuntu0.1                                                 
python-setuptools 3.3-1ubuntu2                                                  
python-six 1.5.2-1ubuntu1                                                       
python-urllib3 1.7.1-1ubuntu4                                                   
python-wheel 0.24.0-1~ubuntu1                                                   
Run Code Online (Sandbox Code Playgroud)

然而

$ apt-show-versions python-numpy mysql-server python-six python-wheel apache2 python-urllib3 python-setuptools
apache2 not installed
mysql-server:all/trusty-security 5.5.46-0ubuntu0.14.04.2 uptodate
python-numpy:amd64/trusty-updates 1:1.8.2-0ubuntu0.1 uptodate
python-setuptools:all/trusty-updates 3.3-1ubuntu2 uptodate
python-six:all/trusty-updates 1.5.2-1ubuntu1 uptodate
python-urllib3:all/trusty-updates 1.7.1-1ubuntu4 uptodate
python-wheel:all/trusty-updates 0.24.0-1~ubuntu1 uptodate
Run Code Online (Sandbox Code Playgroud)

最明显的区别是它显然不包括当前未安装的软件包。