概要
転送するファイル名をkey、getmtimeでそのファイルのエポック秒をvalueとしdict型に押し込める。
転送先との差分を取り、足りない分を転送する。shutil.copy2により最終更新日時などの情報もコピーされる。
os.path.getmtime
ファイルのアクセス日時を取得する。
shutil.copy2
既にファイルがある場合上書き保存する。
同じファイル名でも編集でアクセス日時が異なると上書き保存してくれる。
参考:積年の「shutil.copy はメタデータをコピーしません」の回避策
以下の辞書型を転送元と先で差分をとる
key:ファイル名
item:更新日時
import os
import sys
import glob
import shutil
def log_copy(sfolder_path, dfolder_path):
if os.path.isdir(sfolder_path):
slist = {os.path.basename(filename): os.path.getmtime(filename) for filename in glob.glob(os.path.join(sfolder_path, "*"))}
tlist = {os.path.basename(filename): os.path.getmtime(filename) for filename in glob.glob(os.path.join(dfolder_path, "*"))}
diff_dict = dict(slist.items() ^ tlist.items())
if diff_dict == 0:
pass
else:
for dfile in diff_dict.keys():
try:
shutil.copy2(os.path.join(s_path, channel, dfile), os.path.join(d_path, channel, dfile))
print("File uploaded : %s",os.path.join(s_path,channel, dfile))
except:
sys.exit(1)
if __name__ == "__main__":
log_copy(r"/var/log/squid", r"/mnt/nfs/logs")