
大まかな手順
- 外付けHDDから Macintosh HD 上へフォルダごとコピーする
- フォルダ内のファイルをすべて bz2 で圧縮する
- S3上で Bucket を作成する
- 3Hub を使ってファイルをアップロード
- ファイルがアップロードできているか web console で確認
では順を追って手順を説明していきます。
まず、もろもろの処理を高速に行うために外付けHDDから Macintosh HD (Mac上の適当なフォルダ) へフォルダごとコピーします。
そしてそのフォルダ (ここでは /path/to/Books とします) 下のファイルたちを下記のコマンドで bz2 圧縮します。
$ find /path/to/Books -type f -not -name '*.bz2' -print0 | xargs -0 -L 1 -P 2 bzip2
別に圧縮しなくてもいいのですがAWSは使用容量と通信量の両方に利用料が発生する料金体系なのでできるだけ圧縮はしたほうがいいでしょう。
※ちなみに自炊本はファイルサイズが巨大なので圧縮なしでアップロードしようとするとタイムアウトエラーで失敗しまくりました。

圧縮実行中のプロセスの様子。意図した通り並列処理できている模様。これでマルチコアも活かせているはず。
ちなみに今回親フォルダごと tar で固めなかったのは書籍ごとにダウンロードできるようにしたかったためです。
さて、ジョブが終了するまでしばらく待って、いよいよS3へアップロードしていきます。
https://console.aws.amazon.com/s3/home で Bucket を作成しましょう。僕は技術書系とそれ以外2つの Bucket を作成しました。
アップロードには Cyberduck を使ってもよかったのですが今回はS3専用のクライアント 3Hub を使ってみました。

concurrency を設定できるので2にあげてみたところ特に詰まることもなくアップロードできました。

設定通りに並列アップロードできている様子。

そして最後に https://console.aws.amazon.com/s3/home からファイルがアップロードできていることを確認します。
はい、作業完了です!
自炊本のファイルサイズはとにかく巨大で、数百冊の量になると MacBook に置こうものならすぐに容量を使いきってしまっていてしかたなく外付けHDDに置いていて不便だったのですが、それがやっと解決しました。
うぉおおおおおおおん!
やっと外出先からでも自由に本を取り出せるよー!
Dropbox や Google Drive の有料枠よりも格安で利用できるのが嬉しい。
最後に 3Hub だとURL一覧を簡単に取得できるので、今回を機に冊数を測ってみました。

これで 2つの Backet の URLs をファイルにおいて $ cat *.dat | wc -l してみたところ213冊ありました。
おまけコラム: 本のカテゴリ分けはシンプルに
本の量が多くなってくるとついつい細かなカテゴリ分けをしたくなってしまいますが、そこはグッとこらえてできるだけフラットな構成を心がけましょう。本の一覧性を確保するためです。
人力では最低限のカテゴリ分けのみを行い、特定の本を探すときの絞り込みはコンピュータに仕事させるという思想です。