Shell脚本批量下载图片文件

#!/bin/bash

# 检查是否提供了 CSV 文件作为参数
if [ -z "$1" ]; then
  echo "Usage: $0 <csv_file>"
  exit 1
fi

csv_file="$1"
error_log="download_errors.log"

# 检查 CSV 文件是否存在
if [ ! -f "$csv_file" ]; then
  echo "CSV file not found: $csv_file"
  exit 1
fi

# 清空或创建错误日志文件
> "$error_log"

# 读取 CSV 文件并逐行处理
while IFS=, read -r url filename; do
  # 去除可能的多余空格
  url=$(echo "$url" | xargs)
  filename=$(echo "$filename" | xargs)

  # 检查 URL 和文件名是否为空
  if [ -z "$url" ] || [ -z "$filename" ]; then
    echo "Skipping invalid line: $url, $filename"
    echo "Invalid line: $url, $filename" >> "$error_log"
    continue
  fi

  # 使用 curl 下载图片,设置超时为 5 秒
  echo "Downloading $url to $filename..."
  curl -m 5 -o "$filename" "$url" 2>/dev/null

  # 检查下载是否成功
  if [ $? -eq 0 ]; then
    echo "Downloaded $filename successfully."
  else
    echo "Failed to download $filename."
    echo "Failed: $url, $filename" >> "$error_log"
  fi

done < "$csv_file"

echo "Download process completed."
echo "Errors logged in $error_log."

功能说明:

  1. 错误日志记录

    • 添加了一个 error_log 变量,用于记录下载失败的文件名和 URL。
    • 每次下载失败时,会将失败的 URL 和文件名追加到 download_errors.log 文件中。
  2. 清空日志文件

    • 使用 > "$error_log" 在脚本开始时清空或创建日志文件,确保每次运行脚本时日志文件是空的。
  3. 忽略 curl 的错误输出

    • 使用 2>/dev/nullcurl 的错误输出重定向到 /dev/null,避免在终端显示不必要的错误信息。
  4. 更清晰的输出

    • 在脚本结束时,提示用户错误日志的位置。

使用说明:

  1. 将脚本保存为 download_images.sh
  2. 赋予执行权限:
    chmod +x download_images.sh
    
  3. 运行脚本并传入 CSV 文件:
    ./download_images.sh images.csv
    

错误日志文件:

如果下载失败,错误信息会记录在 download_errors.log 文件中,格式如下:

Failed: http://example.com/image1.jpg, image1.jpg
Failed: http://example.com/image2.jpg, image2.jpg

示例 CSV 文件:

http://example.com/image1.jpg,image1.jpg
http://example.com/image2.jpg,image2.jpg
http://example.com/invalid.jpg,invalid.jpg

注意事项:

  • 如果 CSV 文件中有空行或格式不正确的行,脚本会跳过这些行并记录到错误日志中。
  • 日志文件会记录所有下载失败的条目,方便后续排查问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值