特定のフォルダから並行してscpファイルを取得する

特定のフォルダから並行してscpファイルを取得する

machineAからにファイルを scp したいのですmachineBが、次のようにしています。 のフォルダーから のフォルダーへ、 のフォルダーから のフォルダーへ、多数のファイルを 1つprimaryずつコピーしています。machineAprimarymachineBsecondarymachineAsecondarymachineB

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

複数のファイルを並行してコピーする方法はありますか? たとえば、フォルダーから一度に 5 つのファイルをコピーするなどです。つまり、一度に 1 つのファイルをコピーするのではなく、プライマリ フォルダーまたはセカンダリ フォルダーからそれぞれ 5 つのファイルをコピーしたいということです。

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

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

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

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

答え1

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

  • より良いスループットとより賢いコピー(十分なはずです)を得るために使用してくださいsftp。例えば、-r
  • ControlMaster並列TCP接続のオーバーヘッドを取り除くために使用する
  • 正しいパラメータを使用してparallel

まず、次のことから始めますsftp

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

答え2

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

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

関連情報