[500pt]レンタルサーバ上にあるデータをすべてダウンロードしたい

通常であれば、gzip/lzh/zipなどレンタルサーバで用意されている一般的な方法やffftp.exeなどで行うことができます。
ただ、今回は、データ量が膨大過ぎて(200万ファイル、合計ファイルサイズ2GBのテキストファイル)プロセスをサーバ側でkillされたり通常のソフトではダウンロードできませんでした。

なお、ファイルの場所を書いた、テキストファイルもあります(一部間違った情報が混じっている)。また、普通に見られるデータですので普通にアクセス行いデータを回収する方法もありますが、サーバ上で上手にperlスクリプトを使うなどして、もう少し効率的に回収したく思っています。

このための、Perlスクリプトや良い方法を教えてください。
なお、サーバではperlが使え、SSHでログインもできます。

500ptは実際に当方がダウンロードに成功した方法を紹介いただいた方1名に差し上げます。
複数名おられた場合も合計で500ptとなるように致します。
ヒント的な回答はあまり高ptにはなりませんのでご注意ください。

宜しくお願い致します。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2010/09/26 00:05:58
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:gday No.1

回答回数383ベストアンサー獲得回数71

ポイント100pt

sshが使えるのでしたらWinSCPを使ってダウンロードするのが確実だと思います。

ダウンロードする側にWinSCPをインストールしてサーバーにアクセスします。

途中回線が切れても何度でもトライしてくれるので癖のあるサーバーからでもダウンロードできます。


http://www.tab2.jp/~winscp/

http://sourceforge.net/projects/winscp/


あるいは、サーバー側でrsyncが開放されていればこれを使うのも良い方法です。

これはrsyncの途中でファイルのダウンロードが中断されても再びrsyncを起動すればダウンロードされてないファイルから作業を再開してくれるので便利です。

sshを指定することもできるので安心です。


http://wind-master.dip.jp/soft-info/item/29/catid/11

http://webos-goodies.jp/archives/51213844.html

http://q.hatena.ne.jp/1170298795

http://www.jitaku-server.net/backup_ssh.html

id:TREEG

回答いただきありがとうございます。

WinSCPを使ってみましたが、FFFTPとは比べものにならない安定さでダウンロードできますが、設定を間違っていなければ、同時DL数は9にして行っていますが、1時間で1万ファイルほどDLしました。この計算でいくと、200時間ほど必要になります。流石に、これは長すぎます。

例えば、サーバで圧縮作業を自動で行い、ダウンロードと同時に解凍することで、クライアント側があまり意識することなく、もう少し効率化的にダウンロードできない物でしょうかね?

2GBですので、できれば2時間、どれほど長くても24時間程度と考えているのですが、どうにかならない物でしょうかね?

なお、rsyncについて簡単に調べてみましたが、こちらも利用可能なようですが、現在、WinSCPで作業中でまだ試しておりません。

2010/09/25 16:58:09

その他の回答1件)

id:gday No.1

回答回数383ベストアンサー獲得回数71ここでベストアンサー

ポイント100pt

sshが使えるのでしたらWinSCPを使ってダウンロードするのが確実だと思います。

ダウンロードする側にWinSCPをインストールしてサーバーにアクセスします。

途中回線が切れても何度でもトライしてくれるので癖のあるサーバーからでもダウンロードできます。


http://www.tab2.jp/~winscp/

http://sourceforge.net/projects/winscp/


あるいは、サーバー側でrsyncが開放されていればこれを使うのも良い方法です。

これはrsyncの途中でファイルのダウンロードが中断されても再びrsyncを起動すればダウンロードされてないファイルから作業を再開してくれるので便利です。

sshを指定することもできるので安心です。


http://wind-master.dip.jp/soft-info/item/29/catid/11

http://webos-goodies.jp/archives/51213844.html

http://q.hatena.ne.jp/1170298795

http://www.jitaku-server.net/backup_ssh.html

id:TREEG

回答いただきありがとうございます。

WinSCPを使ってみましたが、FFFTPとは比べものにならない安定さでダウンロードできますが、設定を間違っていなければ、同時DL数は9にして行っていますが、1時間で1万ファイルほどDLしました。この計算でいくと、200時間ほど必要になります。流石に、これは長すぎます。

例えば、サーバで圧縮作業を自動で行い、ダウンロードと同時に解凍することで、クライアント側があまり意識することなく、もう少し効率化的にダウンロードできない物でしょうかね?

2GBですので、できれば2時間、どれほど長くても24時間程度と考えているのですが、どうにかならない物でしょうかね?

なお、rsyncについて簡単に調べてみましたが、こちらも利用可能なようですが、現在、WinSCPで作業中でまだ試しておりません。

2010/09/25 16:58:09
id:mcq No.2

回答回数62ベストアンサー獲得回数3

ポイント35pt

「普通にアクセス行いデータを回収する」というのは、

クローラを使ってHTTPでダウンロードするということですよね。


でもファイルが200万個あるので、1個ずつダウンロードするのは効率が悪い。

そこでgzipなどで200万個のファイルを1ファイルにまとめて、FTPでダウンロードしようとしたが

「プロセスをサーバ側でkillされたり」して上手くいかなかったと。


この「kill」されたのが、以下のどちらなのかによって難しさが変わってきます。

(1)「gzipなどで200万個のファイルを1ファイルにまとめ」るときにkillされる

(2)「FTPでダウンロード」するときにkillされる


(2)なら比較的簡単です。

gzipでまとめたファイルを、もう少し小さな単位(10MBなど)ごとに分割して

HTTPやFTPでダウンロードしたあとに、結合して、解凍すればOKです。

分割と結合の方法は下記の解説が分かりやすいです。

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/154splitfile.h...


もし(1)だとすると、少々面倒です。

SSHでログインして、プロセスがkillされない程度に小さな単位で

ちょっとずつgzipコマンドを実行していかないといけません。

そのための手順は、サーバで使っているOSの情報や

ダウンロードしたいファイルが保存されているディレクトリの構造などが

分からないと説明できません。


そのため、もし(1)の状況なのであれば

「200万個のファイルを1ファイルにまとめ」るのを諦めて

回答者#1さんの方法で1個ずつダウンロードする方法もアリだと思います。

id:TREEG

回答いただきありがとうございます。

やり方的には分かるのですが、これを自動で行ってくるような物を探していたのですが無さそうですね。

結局のところ、もっとも手間の掛かりそうにない方法で、サーバ上ですべてのファイルを一度1ファイルにまとめ(perlスクリプト)、圧縮(SSH)、ダウンロード、再分割(perlスクリプト)で対処いたしました。

2010/09/26 00:05:03

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません