リモートサーバーからプルする複数のファイルがあります。ローカルサーバーでファイルをさらに処理するには、それらを単一のファイルにマージ(連結)する必要がありますが、リモートファイルでは実行できません。
scp
が内部でどのように動作するかはわかりませんが、最高のパフォーマンスを得るには、これらのファイルをローカルディレクトリに書き込んでからマージするのではなく、オンザフライでマージしてから単一のファイルに書き込むべきだと思います。リモートファイルからローカルファイルへのscp
の実行中にファイルをオンザフライでマージ(追加)できるかどうか教えてください。
より良いアイデアがない場合は?
Scpの代わりにSSHを直接使用し、cat
を実行します。あなたがする場所:
scp remote:{file1,file2...} local-dir
代わりに:
ssh remote cat file1 file2 ... > locale-file
ローカルサーバーのみで実行するための以下の手順
私はそれがうまくいった両方のステップをテストしました
最初の一歩
ssh username@remoteserverip "cat file1 file2 file3 >> /remoteserverpath/Mergedfile"
2番目のステップマージしたファイルをリモートサーバーからローカルサーバーにコピーしています。これは、rsyncまたはscpで実行できます。
私はrsyncを好みます
rsync -avzh username@remoteserverip:/remoteserverpath/Mergedfile localserverpath_where_you_want_to_save
これはばかげていますが、実際には、リモートファイルをローカルのfifoにコピーしてそこからパイプすることで、scp
だけでこれを実行できるようです。
$ mkfifo p
$ while :; do cat p >> output ; done &
$ scp somehost:test/\* p
bar 100% 4 10.9KB/s 00:00
doo 100% 4 8.6KB/s 00:00
foo 100% 4 13.6KB/s 00:00
$ kill %1
# output contains the files concatenated
(DebianのOpenSSH 7.4p1-10 + deb9u2でテスト済み)