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

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

リモートサーバーからインポートするファイルが複数あります。ローカルサーバー上のファイルをさらに処理するには、ファイルを単一のファイルにマージ(接続)する必要がありますが、リモートファイルではこれを行うことはできません。

内部的にどのように機能するのかよくわかりませんが、最高のパフォーマンスを得るscpためには、ファイルをローカルディレクトリに書き込んでからマージするのではなく、すぐにマージしてから単一のファイルに書き込む必要があると思います。scpリモートファイルからローカルファイルにプロセス中にファイルを動的にマージ(追加)できるかどうかを教えてください。

より良いアイデアはありませんか?

答え1

scpの代わりにSSHを使用して実行しますcat。どこでやりますか?

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

代わりに、次の操作を行います。

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

答え2

これは愚かですが、scpリモートファイルをローカルのfifoにコピーしてここからエクスポートすると、実際にこれを行うことができるようです。

$ 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

(OpenSSH 7.4p1-10 + deb9u2を使用してDebianでテスト済み)

答え3

次の手順はローカルサーバーでのみ実行されます。

これら2つのステップをテストしましたが、うまくいきます。

最初のステップ


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

関連情報