如何通过软件包名称获取对应tar包文件名(含缓存目录内文件)
如何通过软件包名称获取对应tar包文件名(含缓存目录内文件)
嘿,这个需求我经常碰到,给你分享两个靠谱的方法,分别对应已安装包和未安装包的场景:
方法一:针对已安装的包(用pacman -Q系列命令)
如果你已经把包装到系统里了,要找默认缓存目录(/var/cache/pacman/pkg/)里对应的tar包,直接用这条命令就行:
find /var/cache/pacman/pkg/ -name "$(pacman -Qq <你的包名>)-*.pkg.tar.*"
简单解释下:
pacman -Qq <包名>会输出纯包名(不带版本号)- 后面的通配符会匹配缓存里所有以该包名开头、后缀为
.pkg.tar.xz或.pkg.tar.zst的文件(这两种是Arch系最常见的包格式)
另外,要是你只想知道包的完整文件名(不纠结是否在缓存里),也可以运行pacman -Qii <包名>,在输出里找Installed From那一行,后面就是该包的tar包文件名。
方法二:针对未安装的包(用pacman -F或pacman -Si)
如果包还没安装,先同步下软件包数据库确保信息是最新的:
pacman -Fy
然后用pacman -Si <包名>查看包的详细信息,输出里的Filename字段就是该包在软件源里的tar包路径,比如:
Filename : core/x86_64/bash-5.2.15-1-x86_64.pkg.tar.zst
要是之前下载过这个包,缓存目录里对应的文件就是/var/cache/pacman/pkg/bash-5.2.15-1-x86_64.pkg.tar.zst。
要是你想用pacman -F实现,也可以这么写(不过不如pacman -Si直观):
pacman -Fs <包名> | awk '{print $NF}' | grep -E "\.pkg\.tar\.(xz|zst)$"
备注:内容来源于stack exchange,提问作者Dumb
相关产品推荐
相关产品推荐

