ワンライナー覚え書き
とある blogspot.com の過去記事を一括ダウンロードしたいなー、と思いちょろっとググったらこんなスクリプトを書いてる人がいました。
wget -q -O- "http://google.blogspot.com" | grep "archive.html" | sed -e 's/>[^<]*<//g' | sed -e "s/<a\ class='post-count-link' href='//g" | sed -e "s/'\/a>//g" | xargs wget -np -nc -l 1 -r
おおーこりゃ便利!!と、あっさり当初の目的は達成できたわけですが、sed の部分が気に入らないちょっくら ruby で書き直そう・・・などと強引に慣れないワンライナーで済まそうとアチコチぐぐって時間を浪費しうまく動かなくて、ワンライナーにするためのスクリプト書いて検証しちゃったりして(←よくあるパターン)、もう目的の過去記事のダウンロード終わってるのにまだスクリプトいじってて、嫌になったので重い腰をあげていつも調べてることをメモっとく。
コマンドラインオプション*1
-e | 文字列をスクリプトとして解釈させる。必須。 |
-n | 一行ずつ処理する。 |
-p | 一行ずつ処理した後、print $_ してくれる。 |
-r | ライブラリを読み込む。require 'rubygems' したいときは、-rubygems とか書くとスタイリッシュ(かも)。 |
ワンライナーの書き方忘れてたらざっと読む
ついでに wget のオプション*2
-nc | -no-clobber | 既にファイルが存在する場合はダウンロードで既存ファイルを上書きしない。 |
-O | --output-document=FILE | ダウンロードした内容をFILEに出力する。 |
-r | --recursive | 再帰ダウンロードを行う。 |
-l | --level=NUMBER | 再帰ダウンロード時の最大階層深度をNUMBERに設定する。 |
-np | --no-parent | 親ディレクトリ(フォルダ)を対象外にする。 |
-N | --timestamping | タイムスタンプを比較して、ローカルに既に存在するファイルよりも新しいファイルだけを取得する。 |
微妙な出来・・
ruby -ropen-uri -e "puts open('http://google.blogspot.com').select{|e|e=~/archive.html/}.map{|e|e.scan(/'([^']+)'/)[1]}" | xargs wget -np -nc -l 1 -r