Резервное копирование-архивирование каталогов с помощью Python 3

Публикация № 126363

Администрирование - Архивирование (backup)

11
В целях предварительного знакомства со скриптовым языком python я написал небольшой скрипт копирования-архивирования каталогов из заданного списка.

В целях предварительного знакомства со скриптовым языком python я написал небольшой скрипт копирования-архивирования каталогов из заданного списка. Представляю вам этот скрипт:

 

 

 

import glob
import os
import datetime
import shutil
#Настройки:
#Путь к основному каталогу откуда надо копировать
pathtodata="w:/Base_1c"
#Название каталогов, которые надо копировать с их содержимым:
organiz = ["Folder_01",
           "Folder_02",
           "Folder_03",
           "Folder_04",
           "Folder_05",
           "Folder_06"
           ]
# делаем каталог для копий по текущему времени
# по умолчанию должен быть создан каталог e:/_backups/
dt = datetime.datetime.now()
currentdate = dt.strftime('%Y_%m_%d-%H%M')
os.mkdir('e:/_backups/'+currentdate)

for org in organiz:
    print(org+" копирование...")
    # скопируем все каталоги в созданный
    # копирование дерева  - откуда - куда
    shutil.copytree(''+pathtodata+'/'+org+'', 'e:/_backups/'+currentdate+'/'+org+'/')

# заархивируем все что скопировано
names = glob.glob('e:/_backups/'+currentdate+'/*')
for name in names:
    if os.path.isdir(name):
        # заархивировать все name используем winrar 4.01
        print (name+" архивирование каталога...")
        # ключ -df удаляет скопированные каталоги после архивирования
        os.system(r'c:/"Program Files"/"winrar"/rar.exe a -r -ep1 -df '+name+' '+name+' ')

# все сделал
print("все сделано")

 

КАК РАБОТАТЬ СО СКРИПТОМ:

1. Для начала нужно скачать и установить python 3.2. можно скачать здесь http://python.org/download/

2. Скопируйте скрипт из статьи и сохраните его в текстовый файл с расширением *.py (например, backup.py)

3. Создайте на диске e: каталог _backups и поместите туда этот файл backup.py

4. Настройте список копируемых каталогов в скрипте и сохраните его:

4.1. В моем примере скрипта мои копируемые каталоги лежат в общем каталоге на диске w:\Base_1c

4.2. В скрипте отредактируете список organiz. В этом списке через запятую укажите те каталоги, которые лежат в общем каталоге и которые нужно скопировать. У меня это Folder_01, Folder_02... Folder_06.

5. Скрипт готов к работе - можно его запустить, если все сделано правильно, то:

Результат работы скрипта: в существуещем каталоге e:/_backups/ появляется каталог с текущей датой и временем - например: 2012_04_25-2000, в котором размещены архивы каталогов Folder_01.rar, Folder_02.rar, Folder_03.rar ... Folder_06.rar

 

В системе должен быть установлен winRar для создания архивов

 

Так же это скрипт можно поставить как назначенное задание.

Комментарии по улучшению этого скрипта приветствуются. Кому поможет - буду рад.

 

 



11

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. cool.vlad4 44 26.04.12 15:10 Сейчас в теме
Комментарии по улучшению этого скрипта приветствуются.
скрипт прост как 5 копеек, единственно, что - 1. нужно всегда разделять логику и настройки, выделить настройки в какой-нибудь конфиг (txt, xml и т.д.) , тогда удобно будет менять параметры. 2. заменить платный winrar на бесплатное( 7-zip например) 3. логировать успехи и неудачи
ЗЫ. Это просто пожелания, мне собственно это не нужно.
2. Asis 02.05.12 17:57 Сейчас в теме
По-моему вместо WinRar лучше использовать встроенный модуль zipfile.
Пример:
import zipfile

....
    
    with zipfile.ZipFile(arc_filename, 'a', zipfile.ZIP_DEFLATED) as arc_file:
        arc_file.write(source, filename)

    # arc_filename - имя файла архива.
    # source - путь к исходному файлу.
    # filename - имя файла в архиве.

...

Показать
3. sttt 113 02.05.12 20:09 Сейчас в теме
(2) Asis, боюсь ZipFile будет хуже, потому как наверное ограничение в 4 гига будет а у рара нет
4. Asis 02.05.12 23:15 Сейчас в теме
(3) sttt, вы правы,
действительно есть такое ограничение для zip-файлов до версии спецификации 4.5.
Пожалуй соглашусь, что, несмотря на поддержку модулем zipfile расширения ZIP64 (до 16Гб), следует использовать внешние архиваторы для объемных информационных баз.
5. aximo 704 03.05.12 05:27 Сейчас в теме
да я как-то не задумывался о выборе архиватора... просто ключи winrar мне давно известны, вот и применил их... а так все работает, нормально, без сбоев. что называется - запустил 1 раз и забыл...
6. quick 573 22.08.13 11:42 Сейчас в теме
есть на тему бэкапа хорошее фриварное решение http://www.cobiansoft.com но оно только под винду.
а скрипт можно под себя еще доделать, так что спасибо автору.
7. Rockman 24.09.13 11:57 Сейчас в теме
На тему бэкапа есть еще одно неплохое решение - VersionSafe
8. Vovan58 41 26.02.18 12:55 Сейчас в теме
конкатенация строк при создании пути - не катит.
os.path.join()
- рулит
Оставьте свое сообщение