我有多个文件要从远程服务器中提取。为了进一步处理本地服务器中的文件,我需要将它们合并(连接)为单个文件,但这在远程文件中无法完成。
我不确定scp
内部是如何工作的,但为了获得最佳性能,我认为我应该即时合并它们,然后写入单个文件,而不是将这些文件写入本地目录然后合并。您能否告诉我是否scp
可以在从远程文件到本地文件的过程中动态合并(附加)文件?
如果没有更好的主意?
答案1
直接使用 SSH 代替 scp 并运行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
(在 Debian 上使用 OpenSSH 7.4p1-10+deb9u2 进行测试)
答案3
以下步骤仅在本地服务器中执行
我测试了这两个步骤,效果很好
第一步
ssh username@remoteserverip "cat file1 file2 file3 >> /remoteserverpath/Mergedfile"
第二步您正在将合并文件从远程服务器复制到本地服务器您可以通过 rsync 或 scp 来执行此操作
我更喜欢rsync
rsync -avzh username@remoteserverip:/remoteserverpath/Mergedfile localserverpath_where_you_want_to_save