動画ホスティングサイトから条件に合うものを丸ごとダウンロードしたいということがある。
適当なスクリプトでまず対象を絞り込んで動画 ID のリストを list.txt というファイル名で作成したらこんな感じだったとしよう。
ID001 ID002 ID003 ID004 ID005
そして実際にダウンロードするが、何らかの事情で三個目で中断した。
このときファイル名は「ID」「タイトル」「拡張子」から成るものとする。 ダウンロード済みのファイル名リストを作るのは簡単だ。 ls コマンドを使えばいい。
$ ls *.mp4 *.flv ID001 ぬこパンチ.mp4 ID002 雪の日のぬこ.flv ID003 俺のぬこがこんなに可愛いわけがない.mp4
では、まだダウンロードしていない動画のリストを作るにはどうすればよいだろうか。
ダウンロード済みのリストと list.txt とをくっつけて一度しか出現しないものを抜き出せばよいのである。
$ ls *.mp4 *.flv |gawk '{print $1;}' |cat - list.txt |sort |uniq -u >todo.txt $ cat todo.txt ID004 ID005
これで万事解決というわけではない。 ダウンロードしている間にも動画ホスティングサービスにはどんどん投稿され、削除されることもある。 list.txt を作り直すとこんな感じになったとする。
ID001 ID002 ID004 ID005 ID006
ID003 が削除されて ID006 が追加されている。
この状態で上記のやり方でまだダウンロードしていないリストを作るとどうなるか。
$ ls *.mp4 *.flv |gawk '{print $1;}' |cat - list.txt |sort |uniq -u >todo.txt $ cat todo.txt ID003 ID004 ID005 ID006
ID003 はダウンロード済みであるにもかかわらずこのリストに現れてしまうのである。
Document ID: faf0085744477f20750c997e764618d5