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

如何避免wget通配符下载时创建不存在的文件

解决wget下载不存在文件时创建空文件及周数范围错误的问题

核心问题分析

  • 固定写死的周数范围{1..53}不符合实际年份的周数(比如2023年只有43周),导致大量无效请求
  • wget -Nc参数在目标文件不存在时,会创建空文件而非直接跳过下载

解决方案:动态计算年份最大周数,按需下载

1. 计算目标年份的实际最大周数

利用date命令获取指定年份最后一天对应的ISO周数,以此作为该年的有效最大周数:

max_week=$(date -d "$t-12-31" +%V)

注:如果你的周数计算规则是周日为一周起始,可将%V替换为%U;若以周一为起始,%V或%W均可,根据实际场景调整。

2. 修改下载逻辑,动态生成周数列表

将原固定的周数范围替换为动态生成的有效周数,同时增加文件存在性检查,彻底避免空文件生成。

修改后的完整脚本

#!/bin/bash

# URL由语言、年份和年周数组合而成
# 示例URL:https://example.com/greek/2020/29.gz
url=https://example.com
url_suffix=.gz

# 语言列表
greek=(Alpha Beta Gamma Delta)
german=(Auto Haus Boot)
english=(Hello)

# 年份列表
year=(2019 2020 2021 2022 2023)

for languages in "${greek[@]}" "${german[@]}" "${english[@]}"; do
    for t in "${year[@]}"; do
        dir="ftp/$languages/$t"

        # 直接创建目录(已存在则无操作)
        mkdir -p "$dir"

        # 计算当前年份的最大有效周数
        max_week=$(date -d "$t-12-31" +%V)

        # 遍历所有有效周数,检查文件存在后再下载
        for week in $(seq 1 "$max_week"); do
            file_url="${url}/${languages}/${t}/${week}${url_suffix}"
            # --spider模拟请求检查文件是否存在,静默输出
            if wget --spider --quiet "$file_url"; then
                wget -Nc "$file_url" -P "$dir"
            else
                echo "跳过不存在的文件:$file_url"
            fi
        done
    done
done

关键优化点说明

  • 动态适配周数:自动匹配不同年份的实际周数,杜绝无效的周数请求
  • 前置存在性检查:用wget --spider提前验证文件是否存在,仅在有效时执行下载,彻底避免空文件生成
  • 变量引号包裹:对所有路径、URL变量添加双引号,避免空格或特殊字符导致的解析错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:23:12