![将可用包的名称和版本获取到文本文件中 - 每个包的名称和版本仅在同一行上](https://linux22.com/image/1132124/%E5%B0%86%E5%8F%AF%E7%94%A8%E5%8C%85%E7%9A%84%E5%90%8D%E7%A7%B0%E5%92%8C%E7%89%88%E6%9C%AC%E8%8E%B7%E5%8F%96%E5%88%B0%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%20-%20%E6%AF%8F%E4%B8%AA%E5%8C%85%E7%9A%84%E5%90%8D%E7%A7%B0%E5%92%8C%E7%89%88%E6%9C%AC%E4%BB%85%E5%9C%A8%E5%90%8C%E4%B8%80%E8%A1%8C%E4%B8%8A.png)
我正在寻找一个包含一些可用软件包及其最新版本列表的文本文件。我需要在同一行中包含软件包名称及其最新版本。
试图
目前,我可以获得单个软件包的版本号:
例 1:
apt-cache show python-numpy | grep Version
这给了我一行输出:
Version: 1:1.8.2-2
例 2:
apt-cache show mysql-server | grep Version
这给了我一行输出:
Version: 5.5.44-0+deb8ul
问题:
我对多个包裹感兴趣。
要求
我正在寻找的是软件包名称和版本 - 我想要这种格式:
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
如果可能的话,我希望将这 6 行写入“Output.txt”。如果无法将所有这些行放在同一个文件中,那么我只想将上面的第一行 - python-numpy 1.8.2-2
- 放在输出文件中。
问题:
目前,我可以单独获取每个软件包的名称和版本。但是,有没有办法自动完成这个过程并一次性获取所有软件包?
编辑:
我唯一要寻找的包是:
python-wheel
python-numpy
mysql-server
python-setuptools
python-six
apache2
python-urllib3
答案1
如果您有一个包列表(例如,在名为的文件中input
,每行一个包),那么您可以执行以下操作:
while read package
do
echo $package "$(apt-cache show $package | awk '/Version/{print $2}')"
done < input > Output.txt
答案2
在与文档进行一些争论之后aptitude
,包括这个 Debian能力搜索术语参考,我设法想出了这个丑陋的单行
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
-F '%p %V'
格式化输出为包裹名字进而候选版本--sort=name,~version
按软件包名称和版本排序降序这样我们就可以用来sort -u
撇去最新的?exact-name()
防止搜索范围扩大到包括以下内容mysql-server-5.5
:mysql-server
请注意要检查的包列表的丑陋的括号扩展:似乎没有像全局-oAptitude::Some::Param=true
强制执行这样的选项?exact-name()
。
值得一提的是,该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
然而
$ 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
最明显的区别是它显然不包含当前未安装的软件包。