下载 Anolis 23 所有源码 RPM 包并记录日志
功能包括:自动创建目录、下载日志、进度条及成功/失败统计
创建download_srpm.sh脚本文件
vi download_srpm.sh
内容如下:
#!/bin/bash
# 下载 Anolis 23 所有源码 RPM 包并记录日志
# 用法:./download_rpms.sh [目标目录]
# 目标 URL
SOURCE_URL="https://mirrors.openanolis.cn/anolis/23/os/source/Packages/"
# 获取下载目录(默认为当前目录)
TARGET_DIR="${1:-./anolis23_source_rpms}"
LOG_FILE="${TARGET_DIR}/download.log"
mkdir -p "$TARGET_DIR"
touch "$LOG_FILE" # 确保日志文件存在
# 临时文件存储列表
TMP_FILE="/tmp/rpm_list.txt"
# 初始化统计变量
total=0
success=0
fail=0
# 获取文件列表并过滤 RPM
echo -e "\033[34m[INFO] 正在获取 RPM 列表...\033[0m"
curl -s "$SOURCE_URL" | grep -oE 'href="[^"]+\.src\.rpm"' | sed 's/href="//;s/"$//' > "$TMP_FILE"
# 统计总数
total=$(wc -l < "$TMP_FILE")
count=0
# 进度条函数
progress_bar() {
local progress=$(( $1 * 50 / $total ))
printf "\r[%-50s] %d/%d" "$(printf '#%.0s' $(seq 1 $progress))" "$1" "$total"
}
# 记录开始时间
echo "=== 下载开始时间: $(date '+%Y-%m-%d %H:%M:%S') ===" >> "$LOG_FILE"
# 开始下载
echo -e "\033[34m[INFO] 开始下载到目录: $TARGET_DIR (共 $total 个文件)\033[0m"
while read -r rpm; do
((count++))
progress_bar $count
# 下载并记录结果
if wget -q -nc -P "$TARGET_DIR" "${SOURCE_URL}${rpm}"; then
echo "$(date '+%Y-%m-%d %H:%M:%S') [SUCCESS] ${rpm}" >> "$LOG_FILE"
((success++))
else
echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] ${rpm}" >> "$LOG_FILE"
((fail++))
fi
done < "$TMP_FILE"
# 记录结束时间
echo -e "\n=== 下载结束时间: $(date '+%Y-%m-%d %H:%M:%S') ===" >> "$LOG_FILE"
# 最终统计
echo -e "\n\033[32m[SUCCESS] 下载完成!"
echo -e "成功: \033[33m${success}\033[32m"
echo -e "失败: \033[33m${fail}\033[32m"
echo -e "日志文件: \033[34m$(realpath "$LOG_FILE")\033[0m"
# 清理临时文件
rm -f "$TMP_FILE"