[bash]連番のエロ画像を自動取得するシェル芸3


みなさんおはようございます。ゆうべ悶々としておりましたらこんな閃きが降臨してしまいまして。

突然ですが、水原さな、かわいいですよね。そんな彼女の連番JPG画像を保存したいとするじゃないですか。で、URLの構造ですが、女優名のディレクトリの配下に1から10のディレクトリがあって、その中に「女優名-1.jpg」〜「女優名-12.jpg」のファイルがあるとしましょう。

http://www.example.com/EROGAZOU/sana_mizuhara/1/sana_mizuhara-1.jpg
http://www.example.com/EROGAZOU/sana_mizuhara/1/sana_mizuhara-2.jpg
・・・
http://www.example.com/EROGAZOU/sana_mizuhara/1/sana_mizuhara-12.jpg
・・・
http://www.example.com/EROGAZOU/sana_mizuhara/10/sana_mizuhara-1.jpg
http://www.example.com/EROGAZOU/sana_mizuhara/10/sana_mizuhara-2.jpg
・・・
http://www.example.com/EROGAZOU/sana_mizuhara/10/sana_mizuhara-12.jpg

ディレクトリ名の数字もファイル名の数字もゼロパディングされていないので、seqコマンドを使わずにfor文でまわしてwgetできそうですね。しかし、画像を取得するときにディレクトリ別に保存しないと、ファイル名が重なってしまうので「女優名-1.jpg」「女優名-1.jpg.1」などのように嫌なことになってしまいます。というわけで以下のワンライナーです。

[ (っ´∀`)っ@友の会 ~]$ for A in {1..10}; do for B in {1..12} ; do mkdir -p ${A} ; cd ${A} ; wget http://www.example.com/EROGAZOU/sana_mizuhara/${A}/sana_mizuhara-${B}.jpg; cd ../ ; done ; done

さて次に、これらの画像URL一覧をテキストファイルで入手したとしましょう。テキストのファイル名は「LIST-jpg.txt」とします。この場合、ディレクトリ名の連番だけ意識すればよいのですが、ディレクトリ名の数字だけうまく抜き出したいですよね?幸いなことに、最下層のディレクトリが連番の数字となっています。そこでbasenameとdirnameの合わせ技です。大変満足、お見事、技有り一本!!

[ (っ´∀`)っ@友の会 ~]$ for A in $(cat LIST-jpg.txt); do mkdir -p $(basename $(dirname $A)) ; cd $(basename $(dirname $A)) ; wget $A ; cd ../ ; done

ね、簡単でしょう?