rsync --backup
faria o que você deseja. Você pode especificar um sufixo para arquivos antigos usando --suffix
ou mover arquivos antigos para uma pasta diferente usando --backup-dir
.
Como você sabe, o manipulador de cópia padrão do Windows renomeia os novos arquivos se você escolher "mantém os dois arquivos". Qual programa posso usar para renomear os arquivos antigos? ou melhor, colocar todos os arquivos antigos em uma pasta de backup no mesmo local, cada um com sua própria estrutura de caminho?
Este script coloca todos os arquivos duplicados de %DestinationFolder%
em um diretório de backup chamado $Backup_%date%_%time%
na raiz de %DestinationFolder%
, prefixado por %prefix%
variable, que é $Backup_
por padrão. Você pode personalizar esse valor.
@echo off
set Folder=
set DestinationFolder=
set prefix=$Backup_
set suffix=%date%_%time%
set suffix=%suffix:/=-%
set suffix=%suffix::=-%
cd /d "%Folder%"
for /R %%a in (.) do (
set PTH=%%a
call :DUP
)
xcopy /herkvy "%Folder%" "%DestinationFolder%" 1>nul 2>&1
goto :eof
:DUP
set PTH=%PTH:\.=%
call set PTH=%%PTH:%Folder%=%%
type nul>"%tmp%\FileList"
for /f "tokens=4,* delims= " %%b in ('dir /a "%Folder%%PTH%" ^| find "/" ^| find /i /v "<DIR>"') do (
echo %%c>>"%tmp%\FileList"
)
for /f "tokens=4,* delims= " %%d in ('dir /a "%DestinationFolder%%PTH%" ^| find "/" ^| find /i /v "<DIR>"') do (
find /i "%%e" "%tmp%\FileList" 1>nul 2>&1 && (
if not exist "%DestinationFolder%\%prefix%%suffix%%PTH%" md "%DestinationFolder%\%prefix%%suffix%%PTH%"
move "%DestinationFolder%%PTH%\%%e" "%DestinationFolder%\%prefix%%suffix%%PTH%\%%e" 1>nul 2>&1
)
)
exit /b
Observação: Defina Folder
para o caminho da pasta que você deseja fazer o backup e DestinationFolder
para o caminho da pasta de destino (Backup) Sem o Baclslash no final! Exemplo :
Correto:
set Folder=C:\project\files
set DestinationFolder=D:\Data\backup
Errado:
set Folder=C:\project\files\
set DestinationFolder=D:\Data\backup\