主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

IronPython: Windowsで使えるバックアップスクリプト

                


 以前に書いたバックアップスクリプトを改良した。もとは2つのフォルダ間で同一の相対パスに同一の名前のファイルがあるかを比較して、なければコピーするものだった。これを、同一の相対パスにある同一の名前のファイル同士を比較して、更新日時を見て更新されていれば上書きされるように書き換えた。

必須:.NET Framework 4.0
テスト済み:.NET Framework 4.0のインストールされたWindows7, Windows 8
使い方:Acopyというzipファイルをダウンロードして解凍。プロンプトで以下のコマンドを実行。
ipy.exe ACopy.py 'fullpath of source directory' 'fullpath of target directory'

ちなみに.NET環境で動くスクリプトなので、スクリプト自体はmonoとIronPythonが入っていればLinuxでもmacでも使える。Ubuntu 11.04, mono 4.0.30319.1, IronPython 2.9.9a0の環境で動作確認をした。
import sys

import System
from System.IO import DirectoryInfo

getLastWriteTime = System.IO.File.GetLastWriteTime

def getRelativePathNET(currentDir, dirInfo):
path = dirInfo.DirectoryName.replace(currentDir, "")
return path

def main(source, target):
myFiles = System.IO.DirectoryInfo(source).GetFiles("*.*", System.IO.SearchOption.AllDirectories)
print "Files: %s" %len(myFiles)
failed = []
for file in myFiles:
print file
relativePath = getRelativePathNET(source, file)
targetFullName = System.IO.Path.Combine(target + relativePath, file.Name)
if not System.IO.File.Exists(targetFullName):
print "source: %s\ntarget: %s\n\n" %(file.FullName, targetFullName)
if not System.IO.Directory.Exists(target + relativePath):
System.IO.Directory.CreateDirectory(target + relativePath)
System.IO.File.Copy(file.FullName, targetFullName)
elif System.IO.File.Exists(targetFullName):
if file.LastWriteTime.CompareTo(getLastWriteTime(targetFullName)) > 0:
print "source: %s %s" %(file.FullName, getLastWriteTime(file.FullName))
print "target: %s %s\n\n" %(targetFullName, getLastWriteTime(targetFullName))
try:
System.IO.File.Delete(targetFullName)
System.IO.File.Copy(file.FullName, targetFullName)
except:
print "overwrite failed: %s \n\n" %(file.FullName)
failed.append(file.FullName)
else:
print "Already Exists: %s\n\n" %file.Name
if len(failed):
print 'failed\n'
for file in failed:
print file

#source = r"C:\Users\(user name)\Videos"
#target = r"F:\My Videos"
if len(sys.argv) == 3:
main(sys.argv[1], sys.argv[2])
else:
print "ex: ipy.exe ACopy.py 'source directory' 'target directory'"
            

コメントの投稿

非公開コメント

プロフィール

Matoba

Author:Matoba

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。