質問: **現状** ・FileZilla使用 ・FTPダウンロード ・ファイル数が多い(5万件以上)と、処理完了まで時間がかかる **知りたいこと** ・高速ダウンロードする方法 ・FTPではなくSSHで接続すると、ダウンロード速度は早くなる? ・あるいは、複数ディレクトリを圧縮してダウンロードすると速度は速くなる? ・コマンドは? ・下記で、対象ディレクトリ内の全ファイルを再帰的に圧縮できるのでしょうか? ``` $ zip archive -r 対象ディレクトリ ```
回答: 速度とか高速という単語に引っかかるのですが、時間短縮したいという意図だと思いましたので 分かる範囲で回答します。 SSH (SCP) は暗号化するので遅くなります。 FTPは十分に速い部類の通信プロトコルですが、GUIの FTPクライアントが 5万件超のファイル一覧を取得すると その結果を受信するのに時間がかかってしまうことも考えられます。 できれば コマンドの ftp を覚えて 最短のオペレーションで ファイルを `get` するのがいいと思います。 もしも、ほんの少しでも早くしたいなら `nc` を使います。 > > ・あるいは、複数ディレクトリを圧縮してダウンロードすると速度は速くなる? > > > オーバーヘッドとデータ量が減るので時間短縮が期待できます。 ただ転送速度は変わらないです。 > > ・コマンドは? > > > Unix系でよく使うのは tar + gzip だと思います。 次のコマンドでアーカイブと圧縮を行い、 出来上がった `/var/tmp/hoge.tgz` をFTPで転送してください。 送信元サーバー ``` $ cd /path/to/コピー元/ $ tar cfz /var/tmp/hoge.tgz . ``` コピー先 ``` $ ftp 送信元サーバーのIP USER xxxxx PASSWORD xxxxx ftp> cd /path/to/対象ディレクトリ/ ftp> binary (バイナリモード) ftp> get hoge.tgz (hoge.tgz をダウンロード) ftp> bye (切断) ``` わずかでも速くしたければ `nc` を次のように使ってみてください。 コピー先 (tcp/12345 を待ち受けて、受け取ったデータを tar に渡して展開) ``` $ cd /path/to/展開先/ $ nc -l 12345 | tar xfvz - ``` 送信元 (tar でアーカイブと圧縮を行い、データを nc に渡して コピー先の tcp/12345 ポート宛に転送) ``` $ tar cfz - /path/to/コピー元/ | nc -w 1 コピー先のIP 12345 ``` > > ・下記で、対象ディレクトリ内の全ファイルを再帰的に圧縮できるのでしょうか? > > > $ zip archive -r 対象ディレクトリ > > > その認識で合ってます。