バックアップpythonスクリプト
バックアップ用のPythonスクリプトを作った。
特徴は、、、
・ファイルが更新されていたら上書きする。
・削除されているファイルはバックアップも削除
・confファイルでバックアップ場所指定可
========== backup.py ==========
# -*- coding: utf-8 -*-
conf='backup.conf'
log='backup.log'
COPY_HIDDEN_FOLDERS = False
REMOVE_NOT_EXISTS_FILES = True
import os, shutil
import codecs
def copy(ipath,odir):
fname = os.path.basename(ipath)
idir = os.path.dirname(ipath)
opath = os.path.join(odir,fname)
if not os.path.exists(opath):
if not os.path.isdir(odir):
os.makedirs(odir)
shutil.copymode(idir,odir)
# print fname
try:
shutil.copy2(ipath,opath)
except IOError:
print( 'IOError occur at ' + ipath )
else:
if os.stat(ipath).st_mtime > os.stat(opath).st_mtime + 0.001:
print ipath + u' => ' + opath
shutil.copy2(ipath,opath)
def copytree(idir,odir):
if os.path.isdir(idir):
# print idir, odir
try:
for sub in os.listdir(idir):
ipath = os.path.join(idir,sub)
if os.path.isdir(ipath):
if not COPY_HIDDEN_FOLDERS and sub[0] == '.':
print 'skip at ' + sub
continue
opath = os.path.join(odir,sub)
else:
opath = odir
copytree(ipath,opath)
except WindowsError:
print( 'Winodws Error occur at ' + idir )
elif os.path.isfile(idir):
copy(idir,odir)
def checktree(odir,idir,remove):
for sub in os.listdir(odir):
opath = os.path.join(odir,sub)
ipath = os.path.join(idir,sub)
if os.path.isdir(opath):
if not os.path.exists(ipath):
print 'not exists ' + ipath
if remove:
shutil.rmtree( opath )
else:
checktree(opath,ipath,remove)
elif os.path.isfile(opath):
if not os.path.exists(ipath):
print 'not exists ' + ipath
if remove:
os.remove( opath )
elif os.stat(opath).st_mtime > os.stat(ipath).st_mtime + 0.001:
print 'modified ' + opath
for line in codecs.open(conf,'r','utf-8'):
idir = line.split(u'=>')[0].strip()
odir = line.split(u'=>')[1].strip()
copytree(idir,odir)
checktree(odir,idir,REMOVE_NOT_EXISTS_FILES)
import datetime
fpLog = open( log, 'w' )
fpLog.write( 'execute at' + str( datetime.datetime.today() ) )
特徴は、、、
・ファイルが更新されていたら上書きする。
・削除されているファイルはバックアップも削除
・confファイルでバックアップ場所指定可
========== backup.py ==========
# -*- coding: utf-8 -*-
conf='backup.conf'
log='backup.log'
COPY_HIDDEN_FOLDERS = False
REMOVE_NOT_EXISTS_FILES = True
import os, shutil
import codecs
def copy(ipath,odir):
fname = os.path.basename(ipath)
idir = os.path.dirname(ipath)
opath = os.path.join(odir,fname)
if not os.path.exists(opath):
if not os.path.isdir(odir):
os.makedirs(odir)
shutil.copymode(idir,odir)
# print fname
try:
shutil.copy2(ipath,opath)
except IOError:
print( 'IOError occur at ' + ipath )
else:
if os.stat(ipath).st_mtime > os.stat(opath).st_mtime + 0.001:
print ipath + u' => ' + opath
shutil.copy2(ipath,opath)
def copytree(idir,odir):
if os.path.isdir(idir):
# print idir, odir
try:
for sub in os.listdir(idir):
ipath = os.path.join(idir,sub)
if os.path.isdir(ipath):
if not COPY_HIDDEN_FOLDERS and sub[0] == '.':
print 'skip at ' + sub
continue
opath = os.path.join(odir,sub)
else:
opath = odir
copytree(ipath,opath)
except WindowsError:
print( 'Winodws Error occur at ' + idir )
elif os.path.isfile(idir):
copy(idir,odir)
def checktree(odir,idir,remove):
for sub in os.listdir(odir):
opath = os.path.join(odir,sub)
ipath = os.path.join(idir,sub)
if os.path.isdir(opath):
if not os.path.exists(ipath):
print 'not exists ' + ipath
if remove:
shutil.rmtree( opath )
else:
checktree(opath,ipath,remove)
elif os.path.isfile(opath):
if not os.path.exists(ipath):
print 'not exists ' + ipath
if remove:
os.remove( opath )
elif os.stat(opath).st_mtime > os.stat(ipath).st_mtime + 0.001:
print 'modified ' + opath
for line in codecs.open(conf,'r','utf-8'):
idir = line.split(u'=>')[0].strip()
odir = line.split(u'=>')[1].strip()
copytree(idir,odir)
checktree(odir,idir,REMOVE_NOT_EXISTS_FILES)
import datetime
fpLog = open( log, 'w' )
fpLog.write( 'execute at' + str( datetime.datetime.today() ) )
========== backup.conf ==========
C:\Users\Public => E:\backup\Public
C:\Users\guest => E:\backup\guest
コメント
コメントを投稿