繁体   English   中英

SCP / SSH / SFTP有关最佳文件传输策略的建议

[英]SCP/SSH/SFTP Suggestion on best file transfer strategy

我正面临着这样的问题,即现有脚本需要太长时间才能运行。 在进一步调查中,我发现这是因为为每个传输的文件建立了新的SFTP连接。 当然,批量传输文件会更快。 有没有建议批量传输文件以及记录每个文件还是有问题的文件,即仅在传输时导致错误的文件(这是出于用户支持目的而需要轻松跟踪的文件)。目前,我尝试使用SFTP / SSH / SCP都具有大致相同的传输速度。 因此,这些协议中的任何一种都应该很好。 我只需要一些想法。

如何在您的“从文件”模式中使用文件通配符?

cd sendDir; scp newFiles* user@remoteHost:/target/path

例如?

您写道:“当然,批量传输文件会快得多。” 我希望你在开玩笑。 如果文件要花费几分钟或几小时发送,则必须重新启动scp并没有多大关系。 传输最慢的部分可能是“在线”发送数据所花费的时间。 所以... @Johnsyweb关于使用scp压缩的好评论,但这需要时间,并且可能使CPU的峰值利用率达到100%吗? 秒,分钟? 那么这将如何影响发送方的其他正在进行的工作。 如果您正在做这项工作,并且会被大量使用,那么值得进行测试。

至于问题文件的信息,请将输出从scp保存到日志文件。

scp newFiles* user@remoteHost:/target/path > /tmp/yourSystem/scpScriptLogFile.txt 2>&1

并在您认为存在问题时进行检查,或者在捕获到一些错误消息后进行检查,然后制作一个过滤器脚本,向您发送有关任何问题的信息。

我希望这有帮助。

rsync是业务。

rsync -chavz --partial --progress --stats source_files remotehost.domain:target_dir

哪里:

--checksum             -c              -- skip based on checksums, not mod-time & size                                                                                                                   
--human-readable       -h              -- output numbers in a human-readable format                                                                                                                      
--archive              -a              -- archive mode; same as -rlptgoD (no -H)                                                                                                                         
--verbose              -v              -- increase verbosity                                                                                                                                             
--compress             -z              -- compress file data during the transfer                                                                                                                         
--partial                              -- keep partially transferred files                                                                                                                               
--progress                             -- show progress during transfer                                                                                                                                  
--stats                                -- give some file-transfer stats                                                                                                                                  

rsync在于它仅复制所需内容。 因此,如果您第二次运行该命令,则该命令应完全不复制任何内容(除非同时任一文件的一端已更改)。 如果您的传输因某种原因而中断,这也很有用。 上面命令的输出将为您提供一些有关加快文件传输速度的信息。

使用一些SFTP模块可用的脚本语言。

例如,在Perl中,您有Net :: SFTP :: Foreign:

$sftp = Net::SFTP::Foreign->new($host);

for my $file (@files) {
  $sftp->put("$local_dir/$file", "$remote_dir/$file");
}

这样,相同的SSH连接将用于所有传输。

另一个选择是在本地(.tgz)创建一个存档文件,然后将其传输并在远程主机上解压缩:

tar czf - file1 file2 ... | ssh $host tar xzf -

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM