ファイルを一括ダウンロード

次世代シーケンサーのデータは巨大で、データのコピーをするのも一苦労です。PoTHoSやMitsucalにはfastqファイルへのリンクをつけてありますが、一つずつクリックして保存するのは大変です。Linuxのツールを使って楽をしましょう。

wgetを使う

wgetはHTML中のリンクをたどってダウンロードしてくれます。ファイルへのリンクがあるページ(URL)を与えるとすべてのリンク先をダウンロードしてくれます。

# https://pothos.tsbio.info/TfPT/filer/file/ のfastqファイルをダウンロードする例
$ wget --no-check-certificate --recursive --level 1 --no-clobber https://pothos.tsbio.info/TfPT/filer/file/

オプションの説明 (先頭のハイフンは2個であることに注意)

–no-check-certificate
サーバーの証明書の検証を行わない。
–recursive
再帰的にファイルをダウンロードする。wgetの最初の引数のHTMLファイルの中身を調べて別のファイルへのリンクがあればそれをダウンロードする。
–level
リンク先をどのぐらいたどるか。1を指定することで、最初のページ内のリンクに限定する。5とかにするとPoTHoSのトップページからすべてをたどっていくので大変なことになる。
–no-clobber
一度ダウンロードしたファイルは再ダウンロードしない。ダウンロードを失敗した場合は、そのファイルを削除して、もう一度同じコマンドを実行すればいい。

curlを使う

curlは最初から使える場合が多いです。wgetよりもメジャーな印象です。wgetのような再帰的にダウンロードするオプションはなさそうなので、ダウンロードするファイルを別のファイル(下の例ではfilelist.txt)にいれておいて、順次ダウンロードしてみます。

$ while read F ; do
    if [ -n "$F" -a ! -f "$F" ] ; then
        curl --insecure https://pothos.tsbio.info/TfPT/data/filer/$F -o $F
    fi
done <filelist.txt

認証が必要な場合

curlで認証情報を送って、返ってくるクッキーをファイル(cookie_jar)にいれて、次のアクセスではそれを送るようにします。

download.sh

COOKIE_JAR=cookie_jar
CURL_OPT="--insecure"

curl $CURL_OPT --cookie-jar $COOKIE_JAR \
    --data-urlencode pothos_user_id="user@example.com" \
    --data-urlencode password=my_secret \
    -o auth.html \
    https://pothos.tsbio.info/auth/login/


while read F ; do
    if [ -n "$F" -a ! -f "$F" ] ; then
        curl $CURL_OPT --cookie $COOKIE_JAR https://pothos.tsbio.info/TfPT/data/filer/$F -o $F
    fi
done <$1
$ ./download.sh filelist.txt

オプションの説明

–cookie-jar
サーバーから送られてくるクッキーを保存するファイル。
–data-urlencode
サーバーにデータを送る。ここではログイン情報を引数として指定している。大きい場合は別ファイル(例えばpost)にいれておいて、–data-urlencode @post とすることもできる。
-o (先頭のハイフンは一つ)
サーバーからの返事をいれておくファイル。今回は特に必要でないので、/dev/nullでもいいが、デバッグ用に保存しておく。