Você já tentou rsync ?
rsync is an open source utility that provides fast incremental file transfer.
Ele só transferirá arquivos alterados / novos e somente deltas para arquivos alterados. Ele também tem vários outros recursos interessantes .
Isso não resolve nenhum problema com seu código, mas acho que o rsync será mais fácil do que tentar reinventar a roda com SFTP.