FTPを使用して、かなり複雑なツリー(多くのサブディレクトリなど)を含むディレクトリをアップロードする必要があります。 FTP以外には宛先へのアクセス権がないため、このディレクトリを圧縮できません。タールなし。これは非常に長い距離(米国=>オーストラリア)にあるため、待ち時間は非常に長くなります。
nixでmputを使用して複数のフォルダを別のサーバーにFTPする方法は? のアドバイスに従って、現在ncftp
を使用してmput -r
で転送を実行しています。残念ながら、これは一度に1つのファイルを転送するようであり、使用可能な帯域幅の多くを通信オーバーヘッドに浪費しています。
このプロセスを並列化する方法、つまりこのディレクトリから複数のファイルを同時にアップロードする方法はありますか?もちろん、手動で分割して各チャンクでmput -r
を実行することもできますが、これは面倒なプロセスです。
クライアントマシンは実際にはSSH経由でアクセスされるヘッドレスサーバーであるため、CLIメソッドが強く推奨されます。
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
gnu parallel およびcurlを使用して自動化してみてください。
その後、次のようなことができます:
find . -t f -name "*.pdf" | parallel -j 4 curl -T {} ftp://ftp.site.com --user me:pass
これにより、CPUごとに4つのジョブが実行され、作業パス内のすべてのPDFがアップロードされます。