劣悪ネットワーク環境下で任意のリンク先のファイルをダウンロードする

TL;DR

links.txt に、1行1リンクで記載しておいて、

!/bin/bash
input="./links.txt"
while IFS= read -r var
do
echo "$var"
export ec=18; while [ $ec -eq 18 ]; do /usr/bin/curl -O -C - "$var"; export ec=$?; done
done < "$input"

経緯

Flickr の無料アカウントについて、今まで上限1TBだったのがが上限1000枚にする、との告知。

と同時に、これまでアップロードしてきた画像の全てを、いくつかの zip ファイルに分割してそれらのリンクを吐き出してくれる仕様が追加された。

有料アカウントへの移行も検討しつつ、ダウンロードはしておくかと考えたが、いかんせん我が家のネットワーク環境は劣悪だ。

  1. MacSafariから1GBのzipファイルダンロードを仕掛ける
  2. 就寝
  3. 翌朝エラーの表示を見る
  4. 1に戻る

を数度繰り返して埒が明かないので他の方法を検討

curl

いろんなダウンロードツールを試しても良かったのだろうが、信頼感でCUIに勝るもの無しとの信念のもと curl コマンドでのダウンロードを敢行。

翌朝エラー表示に落胆しつつも、エラーコードが18であることも確認できたので、「エラーコード18ならコンティニューでいけんじゃね?」でやってみたら大当たり

最終的にうまくいった方法

links.txt とか適当に、ダウンロードしたいURL全て記載。

https://example.com/1.zip
https://example.com/2.zip
https://example.com/3.zip

shell script で「上記を読み込んでダンロードしつつ、エラーコード18ならコンティニューで再度ダウンロード」を組む。

dl.bash

!/bin/bash
input="./links.txt"
while IFS= read -r var
do
echo "$var"
export ec=18; while [ $ec -eq 18 ]; do /usr/bin/curl -O -C - "$var"; export ec=$?; done
done < "$input"

実行

$ bash dl.bash

ブラウザ上で、翌朝エラーをみてがっかりしながら再度ダウンロード、とかやってたのが嘘のように一発で全ダウンロードが終わってなんというかこれ爽快。

その他

「そもそもネットワーク環境なんとかしろよ」っていう