2011-11-14 6 views
0

私はこの問題に直面しており、既存のスクリプトの実行には時間がかかりすぎます。さらに調査したところ、転送された各ファイルが新しいSFTP接続が確立されているためだとわかりました。もちろん、バルク転送ファイルはずっと高速になります。ファイルの一括転送についての提案は、各ファイルまたは問題のあるファイル(転送にのみエラーが発生するファイル)をログに記録します(これは、ユーザーサポートのための簡単な追跡ファイルが必要です)。 SFTP/SSH/SCPの転送速度はおおよそ同じです。だから、これらのプロトコルのいずれかがうまくいくはずです。私はちょっとしたアイディアが必要です。SCP/SSH/SFTPベストファイル転送戦略に関する提案

答えて

1

from-filesパターンでファイルワイルドカードを使用するのはどうですか?すなわち

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

たとえば?

あなたは「もちろんバルク転送ファイルはずっと高速です」と書いています。あなたが冗談を言うことを願っています。あなたのファイルが送信するのに数分か数時間かかる場合は、scpを再起動することは重要ではありません。おそらく、転送の最も遅い部分は、データを送信するために費やされた時間です。ですから、@ Johnsywebからのscp圧縮の使用に関する良いコメントですが、それには時間がかかり、CPUを100%スパイクできますか?秒、分ですか?だから、それはあなたの送信側の他の作業にどのように影響しますか。あなたが仕事のためにこれをやっていて、それがたくさん使われるならば、テストする価値があります。

問題ファイルに関する情報については、scpの出力をlogfileに保存してください。

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/を参照してください。それに失敗すると、[manpage for scp](http://www.manpagez.com/man/1/scp/osx-10.6)を確認することができます。PHPなど)と圧縮の設定を微調整するなど... – Johnsyweb

0

SFTPモジュールを使用できるスクリプト言語を使用してください。

たとえば、Perlであなたがネット:: SFTPを持っている::外国人:同じSSH接続は、すべての転送に使用されます

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

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

その方法。

別のオプションは、リモート・ホストでローカルに(.tgz形式)アーカイブファイルを作成し、それを転送し、解凍することです:

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