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

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

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

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

 

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

 

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

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

 

 



8 Comments

  1. cool.vlad4
    Комментарии по улучшению этого скрипта приветствуются.

    скрипт прост как 5 копеек, единственно, что — 1. нужно всегда разделять логику и настройки, выделить настройки в какой-нибудь конфиг (txt, xml и т.д.) , тогда удобно будет менять параметры. 2. заменить платный winrar на бесплатное( 7-zip например) 3. логировать успехи и неудачи

    ЗЫ. Это просто пожелания, мне собственно это не нужно.

    Reply
  2. Asis

    По-моему вместо 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 — имя файла в архиве.
    
    …
    
    

    Показать

    Reply
  3. sttt

    (2) Asis, боюсь ZipFile будет хуже, потому как наверное ограничение в 4 гига будет а у рара нет

    Reply
  4. Asis

    (3) sttt, вы правы,

    действительно есть такое ограничение для zip-файлов до версии спецификации 4.5.

    Пожалуй соглашусь, что, несмотря на поддержку модулем zipfile расширения ZIP64 (до 16Гб), следует использовать внешние архиваторы для объемных информационных баз.

    Reply
  5. aximo

    да я как-то не задумывался о выборе архиватора… просто ключи winrar мне давно известны, вот и применил их… а так все работает, нормально, без сбоев. что называется — запустил 1 раз и забыл…

    Reply
  6. quick

    есть на тему бэкапа хорошее фриварное решение http://www.cobiansoft.com но оно только под винду.

    а скрипт можно под себя еще доделать, так что спасибо автору.

    Reply
  7. Rockman

    На тему бэкапа есть еще одно неплохое решение — VersionSafe

    Reply
  8. Vovan58

    конкатенация строк при создании пути — не катит.

    os.path.join()

    — рулит

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *