web-dev-qa-db-ja.com

scpリモートファイルとローカルファイルに追加

リモートサーバーからプルする複数のファイルがあります。ローカルサーバーでファイルをさらに処理するには、それらを単一のファイルにマージ(連結)する必要がありますが、リモートファイルでは実行できません。

scpが内部でどのように動作するかはわかりませんが、最高のパフォーマンスを得るには、これらのファイルをローカルディレクトリに書き込んでからマージするのではなく、オンザフライでマージしてから単一のファイルに書き込むべきだと思います。リモートファイルからローカルファイルへのscpの実行中にファイルをオンザフライでマージ(追加)できるかどうか教えてください。

より良いアイデアがない場合は?

2
Betta

Scpの代わりにSSHを直接使用し、catを実行します。あなたがする場所:

scp remote:{file1,file2...} local-dir

代わりに:

ssh remote cat file1 file2 ... > locale-file
5
muru

ローカルサーバーのみで実行するための以下の手順

私はそれがうまくいった両方のステップをテストしました

最初の一歩


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

0

これはばかげていますが、実際には、リモートファイルをローカルの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でテスト済み)

0
ilkkachu