web-dev-qa-db-ja.com

特定のフォルダーのscpファイルを並列で

machineAからmachineBにファイルをscpしたいのですが、これは私が行う方法です。 primarymachineAフォルダからprimarymachineBフォルダおよびsecondarymachineAフォルダからsecondarymachineBフォルダに、ファイルの束を1つずつコピーしています。

trinity@machineB:~$ scp trinity@machineA:/data01/primary/* /data01/primary/
trinity@machineB:~$ scp trinity@machineA:/data02/secondary/* /data02/secondary/

複数のファイルを並行してコピーする方法はありますか?フォルダから一度に5つのファイルが好きですか?それで、一度に1つのファイルをコピーする代わりに、プライマリフォルダーまたはセカンダリフォルダーからそれぞれ5つのファイルをコピーしますか?

基本的に、machineAのプライマリフォルダーとセカンダリフォルダーにあるものをすべてmachineB parallelyにコピーします。

私もGNU Parallelを使用できる場合、ボックスにParallelをインストールしました。以下のコマンドを試してみましたが、機能しません。一度に5つのファイルを並行してコピーする必要があると思っていました。すべてがそのフォルダからコピーされます。

parallel -j 5 scp trinity@machineA:/data01/primary/* /data01/primary/

私の並列構文に何か問題がありますか?すべてがそこからコピーされるまで、リモートフォルダーから5つのファイルを並行してコピーする最良の方法は何ですか?

4
david

リモート側で*拡張を行う必要があります。

ssh machineA 'parallel -j 5 scp {} machineB:/data01/primary/ ::: /data01/primary/*'
2
Ole Tange

なぜ並列接続で高速になると思いますか? SCPは少数の小さなファイルを転送するための非常にシンプルなツールであり、スループットとパフォーマンスには影響しません。より多くの並列プロセスから実行すると、処理速度は少し速くなりますが、大幅には向上しません。他の方法でできることは次のとおりです。

  • sftpを使用すると、スループットが向上し、たとえば-r
  • ControlMasterを使用して、並列接続のオーバーヘッドを取り除くTCP接続
  • parallelに正しいパラメータを使用してください

sftpから始めます。

sftp -r trinity@machineA:/data01/primary/ /data01/primary/
1
Jakuje