web-dev-qa-db-ja.com

FTPによるディレクトリのアップロードを並列化するにはどうすればよいですか?

FTPを使用して、かなり複雑なツリー(多くのサブディレクトリなど)を含むディレクトリをアップロードする必要があります。 FTP以外には宛先へのアクセス権がないため、このディレクトリを圧縮できません。タールなし。これは非常に長い距離(米国=>オーストラリア)にあるため、待ち時間は非常に長くなります。

nixでmputを使用して複数のフォルダを別のサーバーにFTPする方法は? のアドバイスに従って、現在ncftpを使用してmput -rで転送を実行しています。残念ながら、これは一度に1つのファイルを転送するようであり、使用可能な帯域幅の多くを通信オーバーヘッドに浪費しています。

このプロセスを並列化する方法、つまりこのディレクトリから複数のファイルを同時にアップロードする方法はありますか?もちろん、手動で分割して各チャンクでmput -rを実行することもできますが、これは面倒なプロセスです。

クライアントマシンは実際にはSSH経由でアクセスされるヘッドレスサーバーであるため、CLIメソッドが強く推奨されます。

8
Bob

lftpはこれをmirror -R -P 20 localpathコマンドで行います-ロケーション間のミラー同期。-Rはリモートサーバーを宛先として使用し、Pは一度に20の並列転送を行います。

man lftpで説明されているように:

   mirror [OPTS] [source [target]]

   Mirror specified source directory to local target directory. If  target
   directory ends with a slash, the source base name is appended to target
   directory name. Source and/or target can be URLs pointing  to  directo‐
   ries.


        -R,    --reverse                 reverse mirror (put files)
        -P,    --parallel[=N]            download N files in parallel
9
Journeyman Geek

gnu parallel およびcurlを使用して自動化してみてください。

その後、次のようなことができます:

find . -t f -name "*.pdf" | parallel -j 4 curl -T {} ftp://ftp.site.com --user me:pass

これにより、CPUごとに4つのジョブが実行され、作業パス内のすべてのPDFがアップロードされます。

2
rking