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

使用bash函数配合wget批量下载URL时如何记录失败下载链接

批量下载URL时记录失败条目的实现方法

原有脚本问题

当前使用的批量下载脚本如下,添加wget -a log参数无法生效的核心原因:-a参数仅会将wget全量运行日志(含进度、成功提示、报错等所有输出)追加写入指定文件,不会单独筛选提取失败URL;且原函数未命名、未判断命令执行状态,无法精准识别下载失败场景。

# 原脚本存在函数未命名的语法问题
function() { wget "$(echo "$1" | some command)"; }
cat url |  xargs -I {} bash -c 'function "{}"'

正确实现方案

通过wget进程退出码判断下载结果:wget执行成功时退出码为0,非0值即为下载失败,失败时手动将对应URL写入专门的失败日志即可。修正后的可直接使用的脚本如下:

# 定义合法命名的下载函数
download_single() {
  raw_url="$1"
  # 替换为实际使用的URL处理命令
  target_url=$(echo "$raw_url" | some command)
  
  # 执行wget下载,可按需调整重试次数、超时时间
  # 若需要保留wget全量运行日志,可追加 -a wget_full.log 参数
  if ! wget --tries=3 --timeout=15 "$target_url"; then
    # 下载失败时将URL追加写入失败日志,按需选择记录原始URL或解析后的实际下载地址
    echo "$raw_url" >> failed_urls.log
  fi
}

# 导出函数供xargs唤起的子进程调用
export -f download_single

# 批量执行下载任务
cat url | xargs -I {} bash -c 'download_single "{}"'

可选优化

  • 脚本执行完成后,所有失败URL会统一存入failed_urls.log,后续可直接读取该列表重试失败任务
  • 若需要记录失败时间,可将写入日志的命令改为echo "[$(date '+%Y-%m-%d %H:%M:%S')] $raw_url" >> failed_urls.log
  • 下载任务量较大时,可给xargs添加-P N参数(N为自定义并发数)提升下载效率,不会影响失败日志写入准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:48:19