列出指定仓库的包

从参数上看,命令dnf repoquery --installed --repo=everything貌似能实现这个功能,但实际输出为空,因此有了如下脚本:

#!/bin/bash
# list_pkgs_from_repo.sh

# 检查是否提供了仓库参数
if [ -z "$1" ]; then
    echo "错误:请提供要查询的仓库名称作为参数。"
    echo "用法:$0 <仓库名称>"
    echo "示例:$0 update  或  $0 @commandline"
    exit 1
fi

# 规范化仓库名称(处理带@和不带@的情况)
repo_name="$1"
if [[ "$repo_name" != @* && ("$repo_name" = "System" || "$repo_name" = "commandline") ]]; then
    repo_name="@$repo_name"
fi

echo "正在查找从 '$repo_name' 仓库安装的包..."

# 遍历所有已安装的包
rpm -qa | while read -r pkg; do
    # 使用dnf查询包信息,提取仓库信息
    repo_info=$(yum info "$pkg" 2>/dev/null | grep -oP 'From repo\s+:\s+\K.*')   
    
    # 检查仓库信息是否匹配(支持部分匹配,如"update"匹配"updates")
    if [[ -n "$repo_info" && "$repo_info" == *"$repo_name"* ]]; then
        echo "$pkg"
    fi
done

posted @ 2025-07-24 14:23  wanghongwei-dev  阅读(10)  评论(0)    收藏  举报