実際の効果: ディレクトリ "/media/data/programmer/project/python" が指定され、バックアップ パスが "/home/diegoyun/backup/" であるとすると、Python ディレクトリ内のファイルは次の場所にバックアップされます。パス全体に従ってバックアップは次のようになります:
/home/diegoyun/backup/yyyymmddHHMMSS/python/xxx/yyy/zzz....
コードをコピー コードは次のとおりです:
import os
import shutil
import datetime
def mainLogic():
#コピーしたいディレクトリを追加
backdir="I:\バックアップ"
copydirs=[]
copydirs.append("D:\programmer")
copydirs.append("D:\diegoyun")
print "ファイルをコピーしています === == ==============
start=datetime.datetime.now()
#バックアップ用のデータ フォルダーを生成
backdir=os.path .join (backdir,start.strftime("%Y-%m-%d"))
#print "backdir is:"+backdir
kc=0
for d copydirs 内:
kc=kc+copyFiles(d,backdir)
end=datetime.datetime.now()
print "完了! ============ == ====="
print "合計ファイル数: " + str(kc)
print "経過時間: " + str((end-start).秒)+" 秒"
def copyFiles(copydir,backdir):
prefix=getPathPrefix(copydir)
#print "prefix is:"+prefix
i=0
for dirpath,dirnames,filenames in os.walk(copydir):
ファイル名の名前:
oldpath=os.path.join(dirpath,name)
newpath=omitPrefix(dirpath,prefix)
print "backdir is:" +backdir
newpath=os.path.join(backdir,newpath)
print "newpath is:"+newpath
if os.path.exists(newpath)!=True:
os.makedirs(newpath)
newpath=os.path.join(newpath,name)
print "From:"+oldpath+" to:"+newpath
shutil.copyfile(oldpath,newpath)
i =i+1
return i
def getPathPrefix(fullpath):
#/media/data/programmer/project/ を与え、プレフィックス
#/media/data/ を取得しますプログラマー/
l=fullpath.split(os.path.sep)
#print str(l[-1]=="")
if l[-1]=="":
tmp =l[-2]
else:
tmp=l[-1]
return fullpath[0:len(fullpath)-len(tmp)-1]
def omitPrefix( fullpath,prefix):
#Giving /media/data/programmer/project/python/tutotial/file/test.py ,
#プレフィックスは Giving /media/data/programmer/project/ ,
#return path as python/tutotial/file/test.py
return fullpath[len(prefix)+1:]
mainLogic()