sexta-feira, 25 de maio de 2012

Copiando arquivos com o robocopy

O robocopy pode ser utilizado de várias maneiras para copiar arquivos entre computadores, ou mesmo entre dispositivos de armazenamento.

 Para copiar o conteúdo de uma pasta para outro local basta utilizar o comando:

robocopy origem destino

Se quiser incluir as subpastas deve-se acrescentar a opção /s:
robocopy origem destino /s

Pode ser utilizado para se fazer mirror de uma pasta, ou seja, ter dentro dela o mesmo conteúdo de uma outra pasta. Para isso, utiliza-se a opção /mir

robocopy origem destino /mir

O robocopy pode também copiar apenas determinados tipos de arquivos.
Caso se queira copiar apenas os arquivos de música para um mp3 player, por exemplo:

robocopy origem destino /s  *.mp3 

Lembrando que o ele só vai copiar os arquivos novos e os modificados, os arquivos que já existem na pasta de destino não serião copiados novamente.
Porém, pode-se também fazer o robocopy não copiar arquivos com determinados critérios.
Por exemplo, não copiar os arquivos extras (arquivos que não existem no destino):

robocopy origem destino /s /xx *.mp3 

Não copiar os arquivos mais novos e mais antigos (arquivos que foram modificado na origem ou destino):

robocopy origem destino /s /xn /xc /xo *.mp3 

Não copiar os arquivos maiores que 5MB (5242880 bytes), nem os menores que 5KB (5120 bytes):

robocopy origem destino /s /max:5242880 /min:5120 *.mp3 

É possível também excluir da lista de arquivos a serem copiados determinadas pasta ou arquivos. Por exemplo, não copiar a pasta variados nem o arquivo audio1.mp3

robocopy origem destino /s /xd variados xf audio1.mp3 *.mp3 

Uma das grandes vantagens do robocopy é a capacidade de continuar a transferência de um arquivo incompleto, para tanto basta adicionar a opção /Z. Porém em alguns casos não é possível usar o modo reiniciável, por isso há também um outro modo de cópia, o de backup (opção /B). É recomendavel é usar a opção /ZB para que o robocopy tente utilizar o modo reiniciável e, caso o acesso ao arquivo seja negado, usar o modo backup.
Apenar o robocopy não possuir uma opção de sincronização de mão-dupla (copiar modificações em ambos os sentidos), pode-se utiliza-lo para esse propósito. Basta executar dois comandos de cópia, utilizando as opções a seguir:

robocopy pasta1 pasta2 /xc /xo *.*
robocopy pasta2 pasta1 /xc /xo *.* 

Porém deve se levar em consideração que neste caso o robocopy não copia arquivos que mudaram de tamanho mas não tiveram suas data de modificação atualizada.
Para facilitar o uso o robocopy ainda permite que a opções sejam salvas para que possam ser utilizadas posteriormente. Para salvar as opções de cópia utiliza-se a opção /save: seguido do nome do arquivo. Para utilizar as opções salvar utiliza-se a opção /job: seguido do nome do arquivo. Ex:

robocopy pasta1 pasta2 /xc /xo /save:copia1 *.* 
robocopy pasta2 pasta1 /job:copia1

Ao salvar as opções de cópia ele também salva o caminho das pastas que foram utilizadas. Portanto, se vc precisa usar o mesmo comando de cópia muitas vezes utlizando as mesmas opções e as mesmas pastas, basta salva-las e utilizar /nosd e /nodd para dizer ao programa que deve ser utilizado as pasta que foram salvas no arquivo. Ex:
robocopy pasta1 pasta2 /xc /xo /save:copia1 *.* 
robocopy /nosd /nodd /job:copia1



Exemplo que utilizo para copiar arquivos pela rede.

ROBOCOPY \\SERVIDOR\Dados E:\Dados /MIR /MT:10 /Z /R:2 /W:2 /COPYALL

MIR = Espelho o que está no servidor A no B (Se houver algum arquivo no destino que não exista na origem ele será apagado)
MT:10 = copia 10 arquivos em paralelos ao invés de um
/z = recomeçar de onde parar o processo de cópia se houver problemas
R:2 = Se houver falha na cópia de algum arquivo duas tentativas serão realizadas
W:2 = com intervalos de 2 segundos.
COPYALL = Copia todos os atributos dos arquivos data/hora/, permissões e etc

2 comentários: