Para galera do Python ( ou outras linguagens de script )

No local onde trabalho usamos um .bat para fazer deploy de classes (java) para o suporte, pra que eles tenham o sistema funcionando independente do que o desenvolvimento esteja fazendo

para isso no .bat usamos o deltree + um xcopy que joga o que está local para o drive compartilhado, e eles rodam um atualizador pra pegar as classes do drive compartilhado e jogar local.

o problema é que demora. as vezes o .bat leva 10 minutos para completar a operação, e com clientes esperando eu pensei se o python (ou qualquer outra linguagem de script) poderia melhorar a performance.

dei uma pesquisa e vi que a classe shutils do python me fornece basicamente o que eu preciso pra refazer o .bat em .py…

Terei algum ganho em performance e a classe shutils do python seria a solução?

Eu recomendaria fazer o seguinte:

  1. Na batch que copia as coisas para o drive compartilhado, em vez de copiar arquivo por arquivo para o drive compartilhado, o mais rápido, em termos de rede, é copiar esses arquivos dentro de um .zip. Então a batch pode zipar os arquivos, e então copiar o zip para o drive compartilhado. É muito mais rápido copiar 100 mb de arquivos compactados dentro de um zip que 10.000 arquivos que perfazem 100 mb, devido ao protocolo usado pelo Windows (SMB).
  2. Na máquina que deve receber os arquivos, ela deve simplesmente descompactar esse arquivo .zip que foi criado no passo 1).

Não é preciso mudar de linguagem.

Outra coisa que é legal: cópia de muitos arquivos pela rede (mesmo usando um utilitário como o robocopy, que só copia os arquivos alterados) sempre pode dar alguma caca. Eu prefiro mandar um zipão mesmo, porque do outro lado dá para ver se o zip está corrompido.

Existem utilitários (ex. zip.exe, unzip.exe que podem ser obtidos no projeto InfoZip) que podem ser chamados via linha de comando para zipar e deszipar arquivos.

Pode continuar com a sua velha e boa batch, já que o tempo de cópia de arquivinhos pequenos (.class) é dado pelo protocolo, não pela velocidade da sua rede (100 MB ou 1 GBit não fazem muita diferença nessa hora).

Outra forma é usar o recurso do rsync (embora o rsync seja mais usado em Linux, existe um encapsulamento, se não me engano chamado cwrsync, que permite usá-lo em Windows.)

Vocè pode ter diretórios sincronizados, que o rsync permite que você sempre tenha as coisas certinhas e com uma vantagem: o rsync compacta e manda as coisas “diferencialmente” - ou seja, ele só manda o que precisa, não copia tudo de novo. Uma vez que as coisas estejam sincronizadas, então ele só copia a diferença. Muito rápido fazer sincronização com o rsync.

http://rsync.samba.org/

http://www.aboutmyip.com/AboutMyXApp/DeltaCopy.jsp - DeltaCopy - o rsync sob Windows

Muito obrigado.
Vou testar todas as ideias aqui…