連番ファイルのダウンロード

とあるサイトの連番ファイルをダウンロードしたくなった。
んで、そんなの bash シェルスクリプトが使える環境 (macOS, Linux) なら超簡単で。

#!/bin/sh

# 001.jpg - 200.jpg だった場合
for (( i=1; i<201; i++ )); do
    n=`printf %03d.jpg $i`
    wget http://なんちゃらどっとこむ/${n}.jpg
done

# 1.jpg - 200.jpg だった場合
#for (( i=1; i<201; i++ )); do
#    wget http://なんちゃらどっとこむ/${i}.jpg
#done

以上。

なんだよこの for 文は使い道があるじゃないの!
wget コマンドは一部ディストリビューションでは dnf や apt で。
google-chrome が使っているから依存関係で勝手に入るはずだけーがさ。

エロゲ専用に落ちぶれた某 OS はアプリや拡張を使うんでしょ?
プログラミングができないサルだけがいまだに使っている OS だよねwwwwww

いや、せっかくだからサイトの JPEG リンク抜き出しをやりたいぞ。
とりあえず URL を読み込んで、それから

href="空白のない文字列jpeg"

を正規表現で抜き出して slice すれば簡単に wget できそうだ。
Python3 の urllib を使えばアホみたく簡単そうだけど、あえて gjs で。

#!/usr/bin/gjs

const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;

if (ARGV.length == 0) {
    print("URL を指定してください");
} else {
    let file = Gio.File.new_for_uri(ARGV[0]);
    let fstream = file.read(null);
    let dstream = new Gio.DataInputStream({base_stream: fstream});
    for (;;) {
        let [val, len] = dstream.read_line_utf8(null);
        if (val.match(/\<\/html\>/gi) !== null)
            break;
        // href="空白のない文字列jpeg" の取得
        let links = val.match(/href=[\'|"]\S+(jpg|jpeg)[\'|"]/gi);
        if (links !== null) {
            for (let link of links) {
                let url = link.slice(6, link.length - 1);
                print(`${url} を取得します`);
                GLib.spawn_command_line_async(`wget ${url}`);
            }
        }
    }
}
//ex: ft=js

書いてみた。

相対パスの場合はガン無視だけど昨今は WordPress ベースが大半だしこれでいいか。
つか相対パスにしている人はそもそも連番ばかりなので最初のでいい。

テキトーなエロ画像サイトで上記を試す。
普通にダウンロードされた、後はリネームして順番を合わせるだけ。
自分が書いたコードが思った通りに動くって本当に面白い。