2011-11-14 37 views
0

我正面臨着這個問題,即現有腳本運行時間過長。在進一步的調查中,我認爲這是因爲每個被傳輸的文件都正在建立一個新的SFTP連接。當然批量傳輸文件將會更快。是否有任何關於批量傳輸文件以及記錄每個文件或只是有問題的文件的建議,即僅在傳輸中導致錯誤的文件(爲了用戶支持的目的,這需要容易跟蹤文件)。目前我已經嘗試使用腳本SFTP/SSH/SCP都具有大致相同的傳輸速度。所以這些協議中的任何一個都應該沒問題。我只需要一些想法。SCP/SSH/SFTP有關最佳文件傳輸策略的建議

回答

1

如何使用的文件外卡在你的檔案模式?即

cd sendDir; scp newFiles* [email protected]:/target/path 

例如?

你「當然散裝transfering文件會這麼多快。」寫道:我希望你在開玩笑。如果您的文件需要幾分鐘或幾小時才能發送,重新啓動scp將無關緊要。據推測,轉移的最慢部分是「在線」發送數據的時間。所以......來自@Johnsyweb的關於使用scp壓縮的良好評論,但是這需要時間並且可以在100%的時間激活一個CPU?秒,分鐘?那麼這將如何影響您發送方的其他正在進行的工作。如果你這樣做是爲了工作,而且它會被使用很多,這將是值得測試的。

至於有關問題的文件信息,保存從SCP輸出到日誌文件。

scp newFiles* [email protected]:/target/path > /tmp/yourSystem/scpScriptLogFile.txt 2>&1 

兼評,當你覺得有問題,或者你得到後拍攝的一些錯誤信息,使過濾器的腳本,發電子郵件給你任何相關問題的信息。

我希望這會有所幫助。

0

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的是,它僅複製它所需要。所以如果你第二次運行這個命令,它應該什麼也不復制(除非其中一個文件在其間任何一端都改變了)。如果您的傳輸以某種方式中斷,這也很有用。上述命令的輸出將爲您提供一些有關加速文件傳輸速度的信息。

+0

眼下的rsync沒有安裝在服務器中。使用SFTP/SSH/SCP執行同樣的事情還有其他的方法嗎? –

+0

安裝很簡單。請參閱http://rsync.samba.org/。如果沒有這個,你可以查看[manp for scp](http://www.manpagez.com/man/1/scp/osx-10.6。PHP)並調整您的壓縮設置等... – Johnsyweb

0

使用某種SFTP模塊可用的腳本語言。

例如,在Perl中你的Net :: SFTP ::國際:

$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 -