Как осуществить выборочное резервное копирование с сохранением структуры путей?

Добрый день! <br/> У меня есть следующая задача: требуется создать резервную копию файлов из многоуровневой структуры папок, состоящей из фиксированного количества уровней. Например, структура может выглядеть так: C:/aaa/bbb/ccc/ddd и C:/aaa/bbb1/ccc1/ddd1. Важное условие — сохранять только файлы, находящиеся на самом нижнем уровне (в данном случае, в папках ddd и ddd1). Остальные файлы, расположенные в других папках, не должны включаться в резервную копию, поскольку они являются менее важными и занимают много места. <br/> Какое решение вы можете предложить для данной задачи? Допускаются любые варианты, включая создание батников и другие методы, главное — чтобы это решение работало на практике.
  • 12 ноября 2024 г. 6:13
Ответы на вопрос 2
Добрый день!

Чтобы создать выборочное резервное копирование файлов, находящихся только на нижнем уровне многопоточной структуры папок, можно воспользоваться командой `robocopy`, которая встроена в Windows, или создать батник для выполнения этой задачи. 

Вот один из возможных подходов:

### Использование команды `robocopy`

1. Откройте текстовый редактор (например, Блокнот) и создайте новый файл с расширением `.bat`.
2. Вставьте в этот файл следующий код:

```bat
@echo off
setlocal

rem Укажите корневую директорию для резервного копирования 
set "source=C:\aaa"
rem Укажите директорию, куда будут сохраняться резервные копии
set "destination=C:\backup"

rem Создание резервной копии файлов только из нижних уровней
robocopy "%source%" "%destination%" *.* /S /E /LEV:3 /COPY:DAT /R:3 /W:5

endlocal
```

### Пояснения к параметрам:

- `C:\aaa` — это ваш корень, который вы хотите резервировать.
- `C:\backup` — это папка для хранения резервной копии.
- `*.*` — включает все файлы.
- `/S` — копирует подкаталоги, но не пустые.
- `/E` — копирует подкаталоги, включая пустые.
- `/LEV:3` — ограничивает уровни копирования до 3-го (то есть, дойдет до 'ddd' и 'ddd1').
- `/COPY:DAT` — копирует данные, атрибуты и временные метки.
- `/R:3` — количество попыток повторного копирования при сбоях — 3.
- `/W:5` — время ожидания между попытками — 5 секунд.

### Запуск:

1. Сохраните файл с расширением `.bat` (например, `backup.bat`).
2. Запустите созданный файл, дважды щелкнув по нему.

### Альтернативный подход с PowerShell

Если вы предпочитаете использовать PowerShell, вот пример скрипта, который можно выполнить:

```powershell
$source = "C:\aaa"
$destination = "C:\backup"

# Создаем папку назначения, если она не существует
if (-Not (Test-Path -Path $destination)) {
    New-Item -ItemType Directory -Path $destination
}

# Копируем файлы с сохранением структуры
Get-ChildItem -Path $source -Recurse -Depth 3 | Where-Object { $_.PSIsContainer -eq $false -and $_.FullName -like "*\ddd\*" -or $_.FullName -like "*\ddd1\*" } | ForEach-Object {
    $destinationPath = Join-Path -Path $destination -ChildPath (Split-Path -Path $_.FullName -Parent).Substring($source.Length + 1)
    $newDestination = Join-Path -Path $destination -ChildPath $destinationPath
    if (-Not (Test-Path -Path $newDestination)) {
        New-Item -ItemType Directory -Path $newDestination -Force
    }
    Copy-Item -Path $_.FullName -Destination $newDestination
}
```

### Пояснения к коду:

- Получаем все файлы до 3 уровня.
- Фильтруем только те, которые находятся в `ddd` и `ddd1`.
- Сохраняем структуру папок в директории назначения.

### Запуск PowerShell скрипта:

1. Скопируйте код в файл с расширением `.ps1` (например, `backup.ps1`).
2. Откройте PowerShell и запустите скрипт.

Эти подходы должны помочь вам организовать выборочное резервное копирование с сохранением структуры папок.
если Windows старый то написать скрипт на WSH, если новый то на PowerShell. Просто ходим рекурсивно по директориям и смотрим, если в директории больше нет директорий то бэкапим её содержимое.
Похожие вопросы