#!/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."
功能说明:
-
错误日志记录:
- 添加了一个
error_log
变量,用于记录下载失败的文件名和 URL。 - 每次下载失败时,会将失败的 URL 和文件名追加到
download_errors.log
文件中。
- 添加了一个
-
清空日志文件:
- 使用
> "$error_log"
在脚本开始时清空或创建日志文件,确保每次运行脚本时日志文件是空的。
- 使用
-
忽略
curl
的错误输出:- 使用
2>/dev/null
将curl
的错误输出重定向到/dev/null
,避免在终端显示不必要的错误信息。
- 使用
-
更清晰的输出:
- 在脚本结束时,提示用户错误日志的位置。
使用说明:
- 将脚本保存为
download_images.sh
。 - 赋予执行权限:
chmod +x download_images.sh
- 运行脚本并传入 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 文件中有空行或格式不正确的行,脚本会跳过这些行并记录到错误日志中。
- 日志文件会记录所有下载失败的条目,方便后续排查问题。