gifts2017

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

Опубликовал Дмитрий Никс (aximo) в раздел Администрирование - Архивирование (backup)

В целях предварительного знакомства со скриптовым языком 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 для создания архивов

 

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

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

 

 



См. также

Подписаться Добавить вознаграждение

Комментарии

1. Ийон Тихий (cool.vlad4) 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) 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) 03.05.12 05:27
да я как-то не задумывался о выборе архиватора... просто ключи winrar мне давно известны, вот и применил их... а так все работает, нормально, без сбоев. что называется - запустил 1 раз и забыл...
6. Евгений Стоянов (quick) 22.08.13 11:42
есть на тему бэкапа хорошее фриварное решение http://www.cobiansoft.com но оно только под винду.
а скрипт можно под себя еще доделать, так что спасибо автору.
7. Алексей (Rockman) 24.09.13 11:57
На тему бэкапа есть еще одно неплохое решение - VersionSafe
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа