Existe uma Ferramenta de Sincronização de Pastas / Arquivos que pode gerar um script de sincronização?

2

Estou procurando uma ferramenta que possa sincronizar pastas gerando um script que possa ser executado a partir de uma linha de comando e o script gerado não exija que a ferramenta seja instalada para funcionar.

Como ele pode comparar diretórios, faça o script das operações de cópia / exclusão e permita que você salve o script e execute o script em qualquer computador.

Também estou trabalhando no mundo do windows. Eu procurei algumas ferramentas de sincronização, mas nenhuma que eu tenha visto até agora gerará scripts.

Qualquer conselho seria muito apreciado!

EDITAR: A situação que tenho é que temos vários sites com a mesma base de código principal. Quando este core codebase é atualizado novos novos arquivos, arquivos alterados arquivos removidos.

Eu gostaria de criar um script que possa ser empacotado com os arquivos novos e alterados que irão copiá-los e excluir os arquivos que não são mais necessários. Tipo de um programa de atualização muito simples. Atualmente faço isso com o winmerge, coloco os arquivos novos e alterados em um arquivo e copio os nomes dos itens que faltam e escrevo o script manualmente.

Como o pacote contém apenas os arquivos novos e alterados, o script precisa lembrar quais arquivos precisam ser excluídos, pois quando executamos o script, ele não precisa se conectar à fonte original para descobrir os arquivos excluídos. Atualmente eu escrevo o script manualmente e é tedioso. Eu estava apenas esperando que alguma ferramenta de sincronização de arquivos tivesse a capacidade de empacotar uma atualização completa com arquivos alterados e exclusões, parece que seria um bom recurso.

    
por Chris Mullins 19.05.2011 / 18:21

3 respostas

1

Só para entender, você tem uma única fonte, com vários destinos idênticos. Você está fazendo alterações na sua origem (criações, atualizações, exclusões) e deseja tornar seus destinos facilmente idênticos à fonte com todas essas alterações?

Então é disso que você precisa:

robocopy "\sourcepath\folder" "\destinationpath1\folder" /MIR /NFL /NDL
robocopy "\sourcepath\folder" "\destinationpath2\folder" /MIR /NFL /NDL
robocopy "\sourcepath\folder" "\destinationpath3\folder" /MIR /NFL /NDL

A opção / MIR tornará seus destinos idênticos à sua origem, incluindo suas ações de exclusão. O / NFL e o / NDL param o robocopy da saída dos arquivos e pastas que estão sendo alterados. Isso produz uma saída simples que lista o número e o tamanho dos arquivos alterados. Se você quiser um log do que foi sincronizado, exclua essas opções.

No entanto, se você tiver alguma personalização configurada nos seus destinos, eles serão removidos.

Atualização após o primeiro comentário de Chris sobre esta resposta

Eu não acho que o que você está procurando seja nativamente possível com robocopy ou outras ferramentas de linha de comando.

No entanto, aqui está um código psuedo que faria o que você está procurando, eu acho. O roteiro real está além das minhas habilidades sem muita pesquisa, mas esse é o fluxo de trabalho que você precisa:

$codebase = "\codebase\"
$comparesource = "\destination to compare to codebase\"
$packagesource = "\where you store update package files\"
$finaldestination = "\path you're actually trying to update\"

robocopy $codebase $comparesource /MIR /LOG:c:\log.txt /FP /NS /NJH /NJS /L
  • / FP = Caminho completo listado no log arquivo
  • / NS = Nenhum tamanho listado no arquivo de log
  • / NJH e / NJS = sem cabeçalho de job e resumo no arquivo de log
  • / L = Apenas liste o que aconteceria Na verdade, não faça nenhuma alteração

Isso fornecerá um arquivo com saída assim:

*EXTRA File          C:\file1.txt
       New File             c:\file2.xls
       Newer                c:\file3.txt

Então, isso precisaria ser executado:


If line contains "newer" or "New File" rest of line enters array $copyfilename
If line contains "*EXTRA" rest of line enters array $deletefilename
\This would only work for a flat structure; subfolders complicate things and you'd need to grab the file name and subfolder name instead. 

for each in $copyfilename {
robocopy $codebase\$copyfilename $packagesource\$copyfilename /e

Append above line to $packagesource\updatepackage.bat, replacing $codebase with $packagesource and $packagesource with $finaldestination
}
for each in $deletefilename {
append "del $finaldestination\$deletefilename" to $packagesource\updatepackage.bat
}

No final, você terá uma pasta (seu $ packagesource) que contém arquivos novos e alterados, bem como um arquivo em lotes que possui comandos de cópia para esses arquivos novos e alterados, e comandos de exclusão para os arquivos removidos. arquivos.

    
por 19.05.2011 / 19:40
4

Um, robocopy salva a configuração de um copie o trabalho para um arquivo que você possa lembrar mais tarde com um parâmetro. Isso é suficiente pela sua definição de script? Foi um download no XP / 2003, e instalado por padrão nas variantes do Vista / 7/2008. Há também RichCopy , uma sobreposição de GUI ao robocopy mencionado anteriormente. Pode até gerar o arquivo de trabalho para que você possa executar o robocopy em um script mais tarde.

    
por 19.05.2011 / 18:45
1

Experimente o Microsoft Synctoy . Não gera scripts, mas é roteirizável. Se você quiser um script personalizado, provavelmente terá que escrever o seu próprio. Esses caras foram incríveis quando comecei a aprender o script do Windows.

    
por 19.05.2011 / 18:33