You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查指定文件中的.rpm包是否存在于内部SLES仓库

检查内部SLES仓库中缺失的软件包

我有一个内部SLES仓库,其中包含大量软件包/依赖项,存储在src、noarch、x86_64等不同子目录下。我还有一份所需软件包/依赖项的列表,希望检查列表文件中的包是否存在于该内部SLES仓库中:若存在则跳过该行,若不存在则将该行保存到新文件,以便统计所有缺失的软件包/依赖项。

我已尝试了两种方案:

方案一

SLES_ALIAS=<repo-alias>
MY_REPO=<some/url/internal-sles-repo>

repo_pkg_list="../repo/required_pkgs.list"
missing_pkg_list="../repo/missing_cbo_pkg.list"

while IFS= read -r rpm; do
    found=false

    for subdir in noarch src x86_64; do
        if curl --output /dev/null --silent --head --fail "$MY_REPO/$subdir/$rpm"; then
            found=true
            break
        fi
    done

    if! $found; then
        echo "RPM not found: $rpm"
    fi
done < "$repo_pkg_list"

该方案遍历MY_REPO的各子目录,通过curl的HEAD请求检查列表文件中的.rpm包是否存在。列表文件与仓库中的rpm包示例如下:

expat-2.4.4-150400.3.17.1.x86_64.rpm
filesystem-15.0-11.8.1.x86_64.rpm
fillup-1.42-2.18.x86_64.rpm
findutils-4.8.0-1.20.x86_64.rpm
fontconfig-2.13.1-150400.1.4.x86_64.rpm
fonts-config-20200609+git0.42e2b1b-150000.4.10.1.noarch.rpm
gawk-4.2.1-150000.3.3.1.x86_64.rpm

方案二

while IFS= read -r line; do
    package_found=false

    for subdir in x86_64 src noarch; do
        if zypper --non-interactive-download "$MY_REPO$line"; then
            echo "Downloaded: $line"
        else
            echo "$line" >> "$missing_pkg_list"
            echo "Failed to download: $line, adding to $missing_pkg_list"
        fi
    done
done < "$repo_pkg_list"

内容的提问来源于stack exchange,提问作者Kevin Niland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:52:45