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

Unix 关于最佳文件传输策略的SCP/SSH/SFTP建议,unix,ksh,Unix,Ksh,我面临着这样一个问题:现有的脚本运行时间太长。在进一步的调查中,我认为这是因为对于传输的每个文件,都会建立一个新的SFTP连接。当然,大容量传输文件会快得多。有没有关于批量传输文件以及记录每个文件或仅记录有问题的文件的建议,即仅传输时会导致错误的文件(这是为了便于跟踪用户支持目的的文件)。目前,我已尝试使用SFTP/SSH/SCP实现脚本,所有这些文件的传输速度大致相同。所以这些协议中的任何一个都可以。我只是需要一些想法 是生意 rsync -chavz --partial --progress

我面临着这样一个问题:现有的脚本运行时间太长。在进一步的调查中,我认为这是因为对于传输的每个文件,都会建立一个新的SFTP连接。当然,大容量传输文件会快得多。有没有关于批量传输文件以及记录每个文件或仅记录有问题的文件的建议,即仅传输时会导致错误的文件(这是为了便于跟踪用户支持目的的文件)。目前,我已尝试使用SFTP/SSH/SCP实现脚本,所有这些文件的传输速度大致相同。所以这些协议中的任何一个都可以。我只是需要一些想法

是生意

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
的好处在于它只复制需要的内容。因此,如果您再次运行该命令,它应该不会复制任何内容(除非同时两端的一个文件发生了更改)。如果您的传输因某种原因被中断,这也很有用。上述命令的输出将为您提供一些信息,说明它在多大程度上加快了文件传输。

在“从文件”模式中使用文件通配符如何?i、 e

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
当你认为有问题时,或者在你收到一些错误信息后,做一个过滤脚本,通过电子邮件向你发送关于任何问题的信息


我希望这会有所帮助。

使用一些脚本语言,可以使用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 -

目前服务器中未安装rsync。使用SFTP/SSH/SCP还有其他方法可以做同样的事情吗?安装起来很简单。看见否则,您可以检查并调整压缩设置等。。。