リモートサーバーからインポートするファイルが複数あります。ローカルサーバー上のファイルをさらに処理するには、ファイルを単一のファイルにマージ(接続)する必要がありますが、リモートファイルではこれを行うことはできません。
内部的にどのように機能するのかよくわかりませんが、最高のパフォーマンスを得る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