• Как в Windows сделать бэкап файлов, копируемых с заменой?

    erge
    @erge
    Примус починяю
    1) можно использовать нормальную систему контроля версий, например система - git, есть готовый сервис GitHub

    посмотрите инфу в сети, видео на ютюбе, все станет понятно как и что работает.

    2) можно самому написать скрипты например на PowerShell, что-то типа этого:

    $BackupPath = "D:\SomeBackupPath"
    $SourcePath="C:\Some\Source\Path"
    $DestinationPath="C:\Some\Destionation\Path"
    $7zip="C:\Program Files\7-Zip\7z.exe"
    
    $SourceFiles = ( Get-ChildItem $SourcePath -Recurse -Force | where {$_.Mode -notlike 'd*'} | foreach {$_.FullName.Replace("$SourcePath\","") } )
    
    $DestinationFiles = ( Get-ChildItem $DestinationPath -Recurse -Force | where {$_.Mode -notlike 'd*'} | foreach {$_.FullName.Replace("$DestinationPath\","") } )
    
    $ToPackFiles = @()
    
    $SourceFiles | foreach { if ($DestinationFiles -match "^"+ $_.Replace("\","\\") +"$") { $ToPackFiles += "'$_'" } }
    
    cd $DestinationPath
    
    if ($ToPackFiles) { $ToPackFiles | & $7zip a -mx9 ("$BackupPath\"+(Get-Date -Format "yyyy-MM-dd_HHmmss")+".7z") }
    
    Copy-Item "$SourcePath\*" -Recurse $DestinationPath -Force -PassThru | foreach { Write-Host $_.FullName }


    выложил на GitHub - BackupAndCopy.ps1

    скрипт берет файлы из SourcePath сравнивает с DestinationPath, если есть совпадающие, то пакует совпадающие файлы из DestinationPath в 7z архив в папку BackupPath (имя файла дата+время)
    после чего копирует файлы из SourcePath в DestinationPath
    PS: в системе должен быть установлен 7zip , указать к нему путь в переменной $7zip

    Upd:
    Так же посмотрите ZPAQ, он поддерживает версионность файлов, т.е. внутри одного архива можно сохранять например 10 копий одного и того же файла с разными датами изменения.

    Upd2:
    Обновил скрипт, исправил некоторые ошибки (сравнение скрытых файлов, упаковка лишних файлов)
    Ответ написан
    1 комментарий