diff --git a/backup.py b/backup.py index becdb60..d4ce063 100644 --- a/backup.py +++ b/backup.py @@ -1,10 +1,11 @@ +#!/usr/bin/python from imohash.imohash import hashfile as _imohash import hashlib -import hashlib import multiprocessing import os import psutil import sqlite3 +import argparse # https://stackoverflow.com/a/17782753 def file_hash(path, block_size=4096*8): ''' @@ -66,4 +67,9 @@ def backup(top,db_path): cur.executemany('INSERT OR IGNORE INTO `paths` VALUES (?,?,?);',paths) con.commit() if __name__ == "__main__": - backup(os.path.expandvars('%userprofile%'),'test.db') \ No newline at end of file + parser = argparse.ArgumentParser() + parser.add_argument('dir') + parser.add_argument('-d','--database',default='fs.db') + args = parser.parse_args() + __init_database__(args.database) + backup(args.dir,args.database) diff --git a/restore.py b/restore.py index e69de29..6aa36e6 100644 --- a/restore.py +++ b/restore.py @@ -0,0 +1,43 @@ +#!/usr/bin/python +from backup import hashify +import argparse +import datetime +import time +import shutil +import os +import sqlite3 +def create_temp(): + name= 'fsb{}'.format(datetime.datetime.today()) + os.mkdir(name) + return name +def lookup(cur,imohash,realhash=None): + if realhash is not None: + cur.execute('SELECT path FROM paths where blake=?',[realhash]) + else: + cur.execute('SELECT path FROM paths where imohash=?',[imohash]) + res = cur.fetchone() + if len(res) == 1: + return res[0] +def restore(database,source,destination): + con=sqlite3.connect(database) + cur=con.cursor() + temp = create_temp() + hashes = hashify(source) + for path,imohash,realhash in hashes: + ppath = os.path.join(source,path) + qpath=lookup(cur,imohash,realhash) + qpath=os.path.join(temp,qpth) + parent = os.path.dirname(qpath) + if not os.path.exists(parent): + os.makedirs(parent) + shutil.move(ppath,qpath) + shutil.move(temp,dest) +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('database') + parser.add_argument('src') + parser.add_argument('dst',default = None,nargs='?') + args = parser.parse_args() + if args.dst is None: + args.dst=args.src + restore(args.database,args.src,args.dst)