博客 / Others/ shell bash脚本批量wget下载页面上的图片

shell bash脚本批量wget下载页面上的图片

背景与需求

为了获取某个国外网站的模板(国外的设计师真的很赞),尝试使用 wget 工具抓取网页资源。其中部分图片的路径信息被内嵌在 JavaScript 文件中,例如:

;(function( $, window, document, undefined ) {

    var Customizer = function( ) {
        this.init();
    }

    Customizer.prototype = {

        patterns: [
            'assets/images/layout/bg/arches.png',
            'assets/images/layout/bg/blu_stripes.png',
            'assets/images/layout/bg/bright_squares.png',
            'assets/images/layout/bg/brushed_alu.png',
            'assets/images/layout/bg/circles.png',
            'assets/images/layout/bg/climpek.png',
            'assets/images/layout/bg/connect.png',
            'assets/images/layout/bg/corrugation.png',
            'assets/images/layout/bg/cubes.png',
            'assets/images/layout/bg/diagonal-noise.png',
            'assets/images/layout/bg/diagonal_striped_brick.png',
            'assets/images/layout/bg/diamonds.png',
            'assets/images/layout/bg/diamond_upholstery.png',
            'assets/images/layout/bg/escheresque.png',
            'assets/images/layout/bg/fabric_plaid.png',
            'assets/images/layout/bg/furley_bg.png',
            'assets/images/layout/bg/gplaypattern.png',
            'assets/images/layout/bg/gradient_squares.png',
            'assets/images/layout/bg/grey.png',
            // ... 可能还有其他路径
        ]
    }

我们需要从这段代码中提取出图片文件名(如 arches.png),并批量下载。

修正后的 Bash 脚本

原文提供的脚本存在语法错误(man 不是有效的函数定义关键字)。以下是修正后的标准脚本:

#!/bin/bash
# Bash script for downloading PNG files in batch

# 存放图片文件名的文本文件
text="png.list"
# 图片的基础 URL 路径
url="http://www.xxx.com/xxx/assets/images/layout/bg"

# ==============================================
# 函数定义
# ==============================================
download_files() {
    while read -r line
    do
        # 去除可能的空白字符(如行尾换行符)
        filename=$(echo "$line" | tr -d '[:space:]')
        if [ -n "$filename" ]; then
            echo "正在下载: $filename"
            wget -q "$url/$filename"
        fi
    done < "$text"
}

# ==============================================
# 主程序执行
# ==============================================
download_files

脚本说明与使用步骤

  1. 准备文件列表:首先,你需要将图片文件名(例如 arches.png)逐行保存到一个名为 png.list 的文本文件中。
  2. 修改 URL:将脚本中的 url 变量值替换为实际的基础 URL 路径。
  3. 运行脚本:在终端中,为脚本添加执行权限并运行:
    chmod +x download.sh
    ./download.sh

如何从 JS 文件中提取文件名

你可以使用以下命令快速从 JS 代码片段中提取出 PNG 文件名并生成 png.list 文件:

# 假设 JS 代码保存在文件 customizer.js 中
grep -o "'[^']*.png'" customizer.js | sed "s/'//g" > png.list

这个命令会查找所有被单引号包裹的、以 .png 结尾的字符串,并去除引号后输出到文件。

注意事项

  • 确保 wget 命令已安装在你的系统中。
  • 如果目标网站需要认证或设置了反爬机制,简单的 wget 可能无法成功,可能需要添加 --user-agent--header 等参数。
  • 批量下载时请尊重网站的 robots.txt 规则和服务条款,避免对服务器造成过大压力。

发表评论

您的邮箱不会公开。必填项已用 * 标注。