You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Shell Script的wget下载公开GitHub仓库指定版本二进制包并移至本地目录

没问题!这是个很常见的需求,我给你整理了一套实用的shell脚本实现方案,附带详细说明:

完整实现脚本
#!/bin/bash

# 配置参数,请根据你的实际需求修改
REPO_OWNER="your-github-username"
REPO_NAME="your-repo-name"
RELEASE_TAG="v1.0.0"  # 对应GitHub上的release版本标签,比如v2.3.4
BINARY_NAME="app-linux-amd64"  # 要下载的二进制文件名,必须和release页面的文件名完全匹配
TARGET_DIR="/usr/local/bin"  # 最终要存放文件的本地目录

# 构造GitHub release文件的下载URL
DOWNLOAD_URL="https://github.com/${REPO_OWNER}/${REPO_NAME}/releases/download/${RELEASE_TAG}/${BINARY_NAME}"

# 检查目标目录是否存在,不存在则自动创建
if [ ! -d "${TARGET_DIR}" ]; then
    echo "目标目录 ${TARGET_DIR} 不存在,正在创建..."
    mkdir -p "${TARGET_DIR}"
fi

# 开始下载文件,-O指定保存文件名,去掉-q可以显示下载进度
echo "开始下载 ${BINARY_NAME} (版本 ${RELEASE_TAG})..."
wget -q -O "${BINARY_NAME}" "${DOWNLOAD_URL}"

# 判断下载是否成功
if [ $? -eq 0 ]; then
    # 移动文件到目标目录,若目标是系统目录(如/usr/local/bin),可能需要加sudo
    echo "下载成功,正在移动到 ${TARGET_DIR}..."
    mv "${BINARY_NAME}" "${TARGET_DIR}/"
    
    # 可选:给二进制文件添加执行权限,方便直接运行
    chmod +x "${TARGET_DIR}/${BINARY_NAME}"
    
    echo "操作完成!文件已保存至 ${TARGET_DIR}/${BINARY_NAME}"
else
    echo "下载失败,请检查URL、网络连接或参数配置是否正确"
    exit 1
fi
关键步骤详解

1. 配置核心参数

先定义几个变量,让脚本更易维护:

  • REPO_OWNER:GitHub仓库的所有者(用户名或组织名)
  • REPO_NAME:仓库的名称
  • RELEASE_TAG:你要下载的release版本标签(必须和GitHub上的标签完全一致,比如v1.2.3
  • BINARY_NAME:release页面里提供的二进制文件名(注意大小写、后缀都要匹配,比如app-darwin-arm64app-windows.exe
  • TARGET_DIR:文件最终要移动到的本地目录(比如/usr/local/bin可以让你直接在终端调用该程序)

2. 构造下载URL

GitHub的release文件下载地址是固定格式的:https://github.com/<所有者>/<仓库>/releases/download/<版本标签>/<文件名>,用变量拼接可以让脚本适配不同的仓库和版本。

3. 预处理目标目录

mkdir -p可以递归创建目录,即使父目录不存在也能成功,避免因为目录缺失导致后续移动操作失败。

4. 下载与校验

  • wget-O参数用来指定下载后保存的文件名;-q是静默模式,去掉它就能看到实时下载进度
  • 下载完成后,通过$?判断wget的执行状态(返回0表示成功,非0则是失败)

5. 后续处理

  • mv命令将文件移动到目标目录,如果目标是系统级目录(比如/usr/local/bin),可能需要在mv前加上sudo获取权限
  • 下载的二进制包默认可能没有执行权限,所以用chmod +x添加可执行权限,这样你直接输入文件名就能运行程序了
特殊情况处理

如果release里的文件是压缩包(比如.tar.gz.zip),你需要先解压再移动,举个例子:

# 假设下载的是tar.gz压缩包
wget -q -O "${BINARY_NAME}.tar.gz" "${DOWNLOAD_URL}"
tar -xzf "${BINARY_NAME}.tar.gz"  # 解压压缩包
mv "${BINARY_NAME}" "${TARGET_DIR}/"  # 移动解压后的二进制文件
rm "${BINARY_NAME}.tar.gz"  # 可选:删除临时压缩包

另外,如果你的网络访问GitHub有问题,可以在脚本开头添加代理配置:

export https_proxy=http://your-proxy-address:port

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

火山引擎 最新活动