前回のこのエントリーの続きといいますか、シリーズになっちゃってる感が否めないですがw
珠玉のエロ画像でbashのお勉強です。井上和香、唇がエロくて大好きです。そんな (っ´∀`)っ ゃー が寝ながら画像getして翌朝ムフフと楽しみたいという動機で今回はワンライナーで連番のエロ画像を取得します。
今回のターゲットはココ。
ttp://intervalues6.com/w/waka.html
ttp://intervalues6.com/w/waka2.html
ttp://intervalues6.com/w/waka3.html
ttp://intervalues6.com/w/waka4.html
これらにリンクされている画像を普通にwgetで
$ for i in `echo {1..100}`; do sudo wget http://intervalues6.com/w/waka$i.jpg; done
なんてダウンロードしようと思ったのですが、ここのサーバはちゃんとリファラ対策をしています。
なので、wgetでリファラくっつけてダウンロードするには
$ for i in `echo {1..100}`; do wget --referer=http://intervalues6.com/w/waka.html http://intervalues6.com/w/waka$i.jpg; done
こうします。waka[2-4].htmlからリンクされている画像であっても、サーバサイドでは
「どこぞのドメインからのリファラを許可するか」しか見ていないので、すべてwaka.htmlからのリファラでいけます。なお、実際にダウンロードしてみるとわかるのですが、waka92.jpg以降が404なので、idol.htmlにリダイレクトされていますので、適宜これを削除します。
$ rm -f idol.html*
================================================================================
今日のワンポイント
wgetコマンドで画像直getできなかったら、同じドメインの適当なURL(存在するファイルで)で
リファラをくっつけてやろう
================================================================================
次に、curlコマンドで同じことをやってみます。curlコマンドの -e オプションで、リファラをくっつけてやります。-O オプションがないと、ファイルとして保存できません。
$ for i in `echo {1..100}`; do curl -e http://intervalues6.com/w/waka.html -O http://intervalues6.com/w/waka$i.jpg; done
さてこれだと
$ ls waka100.jpg waka18.jpg waka26.jpg waka34.jpg waka42.jpg waka50.jpg waka59.jpg waka67.jpg waka75.jpg waka83.jpg waka91.jpg waka9.jpg waka10.jpg waka19.jpg waka27.jpg waka35.jpg waka43.jpg waka51.jpg waka5.jpg waka68.jpg waka76.jpg waka84.jpg waka92.jpg waka11.jpg waka1.jpg waka28.jpg waka36.jpg waka44.jpg waka52.jpg waka60.jpg waka69.jpg waka77.jpg waka85.jpg waka93.jpg waka12.jpg waka20.jpg waka29.jpg waka37.jpg waka45.jpg waka53.jpg waka61.jpg waka6.jpg waka78.jpg waka86.jpg waka94.jpg waka13.jpg waka21.jpg waka2.jpg waka38.jpg waka46.jpg waka54.jpg waka62.jpg waka70.jpg waka79.jpg waka87.jpg waka95.jpg waka14.jpg waka22.jpg waka30.jpg waka39.jpg waka47.jpg waka55.jpg waka63.jpg waka71.jpg waka7.jpg waka88.jpg waka96.jpg waka15.jpg waka23.jpg waka31.jpg waka3.jpg waka48.jpg waka56.jpg waka64.jpg waka72.jpg waka80.jpg waka89.jpg waka97.jpg waka16.jpg waka24.jpg waka32.jpg waka40.jpg waka49.jpg waka57.jpg waka65.jpg waka73.jpg waka81.jpg waka8.jpg waka98.jpg waka17.jpg waka25.jpg waka33.jpg waka41.jpg waka4.jpg waka58.jpg waka66.jpg waka74.jpg waka82.jpg waka90.jpg waka99.jpg
おや?実は100個jpgがあった?
$ for i in `echo {90..100}` > do > file waka$i.jpg > done waka90.jpg: JPEG image data, JFIF standard 1.01 waka91.jpg: JPEG image data, JFIF standard 1.01 waka92.jpg: HTML document text waka93.jpg: HTML document text waka94.jpg: HTML document text waka95.jpg: HTML document text waka96.jpg: HTML document text waka97.jpg: HTML document text waka98.jpg: HTML document text waka99.jpg: HTML document text waka100.jpg: HTML document text
はい、やっぱりwaka92.jpg以降は404でリダイレクトされた後のhtmlファイルを拾ってきています。それでは、92から100までのファイルを削除したいのですが、ここではfileコマンドでJPEGじゃないファイルを拾って削除することにします。
$ for i in `ls`; do for f in `file $i | grep -v "JPEG image data" | awk '{print $1}' | sed s/:$//g`; do rm -f $f; done; done
これでOKです。for文の入れ子で、削除するファイルを指定してやります。外側のfor文は、カレントディレクトリ全体をlsし、内側のfor文で、うそんこJPEG(拡張子は.jpgなんだけど中身がJPEGじゃない)なデータをとっ捕まえて、出力結果をawkとsedで整形し、削除してやります。
上記の例だと、たまたま92から100まで連続してうそんこJPEGだってわかってるからいいようなものの、連番のファイルじゃなかったり、連番のファイルであっても、飛び飛びにうそんこJPEGが混じっているようなときに楽してファイル整理をすることができます。
ね、簡単でしょ?