利用Shell脚本通过Wget在Linux服务器批量下载文件

一、整理文件地址

将需要下载的文件地址写入url_list.txt,一行一个url。

二、通过wget下载

新建download.sh脚本文件,写入以下内容:

#!/bin/bash

# 定义要存储下载内容的目录
download_dir="/path/to/download_directory"

# 如果目录不存在,则创建目录
if [ ! -d "$download_dir" ]; then
  mkdir -p "$download_dir"
fi

# 文件包含URL列表
url_file="/path/to/your/url_list.txt"

# 逐行读取URL文件,并使用wget下载
while IFS= read -r url; do
  if [[ -n "$url" ]]; then
    echo "Downloading: $url"
    wget -P "$download_dir" "$url"
  fi
done < "$url_file"

echo "All downloads complete."

三、执行下载命令

#请先确认路径正确
chmod +x download.sh
./download.sh

PS:

  • 如果想要实现下载后的文件自动重命名,可将download.sh修改为:

#!/bin/bash

# 定义要存储下载内容的目录

download_dir="/path/to/download_directory"

# 如果目录不存在,则创建目录

if [ ! -d "$download_dir" ]; then
  mkdir -p "$download_dir"
fi

# 文件包含URL列表

url_file="/path/to/your/url_list.txt"

# 初始化计数器

i=1

# 逐行读取URL文件,并使用wget下载

while IFS= read -r url; do
  if [[ -n "$url" ]]; then
    echo "Downloading: $url"
    # 使用 -O 指定完整路径文件名
    wget -O "${download_dir}/${i}.jpg" "$url"
    let i=i+1
  fi
done < "$url_file"

echo "All downloads complete."

文件名则会按下载顺序生成 (1.jpg, 2.jpg, 3.jpg…)

  • 上述方法虽然可以实现文件自动重命名,但是如果下载链接中有错误文件,仍然会生成相应序号的文件名,若想保持文件名称连续,可增加错误处理,将download.sh修改为:

#!/bin/bash

# 定义要存储下载内容的目录
download_dir="/path/to/download_directory"

# 如果目录不存在,则创建目录
if [ ! -d "$download_dir" ]; then
  mkdir -p "$download_dir"
fi

# 文件包含URL列表
url_file="/path/to/your/url_list.txt"

# 初始化计数器
i=1

# 逐行读取URL文件,并使用wget下载
while IFS= read -r url; do
  if [[ -n "$url" ]]; then
    echo "Downloading: $url"
    
    # 创建临时文件路径(使用随机数避免冲突)
    temp_file="${download_dir}/temp.$$.$RANDOM.jpg"
    
    # 尝试下载到临时文件
    if wget -O "$temp_file" "$url" 2>/dev/null; then
        # 下载成功:重命名为最终文件
        final_file="${download_dir}/${i}.jpg"
        mv -f "$temp_file" "$final_file"
        echo "Download successful: $final_file"
        let i=i+1
    else
        # 下载失败:删除临时文件并报错
        rm -f "$temp_file"
        echo "Download failed: $url"
    fi
  fi
done < "$url_file"

echo "All downloads complete."

主要改进说明:

  1. 临时文件处理

    • 使用临时文件路径:

      temp_file="${download_dir}/temp.$$.$RANDOM.jpg"
      
    • $$ 表示当前进程ID

    • $RANDOM 生成随机数

    • 确保多个下载任务不会冲突

  2. 错误处理流程

    if wget -O "$temp_file" "$url" 2>/dev/null; then
        # 成功处理
    else
        # 失败处理
    fi
    
  3. 下载成功时

    • 将临时文件重命名为序号文件:mv -f "$temp_file" "${download_dir}/${i}.jpg"
    • 增加计数器:let i=i+1
  4. 下载失败时

    • 删除临时文件:rm -f "$temp_file"
    • 不增加计数器(保持序号连续)
    • 输出错误信息:echo "Download failed: $url"
  5. 静默模式

    • 2>/dev/null 隐藏wget的错误输出(保留成功信息)
    • 如需查看详细错误,可移除这部分

Joker ·
评论 · 首页 订阅