|
|
#!/usr/bin/pythonfrom backup import hashifyimport argparseimport osimport shutilimport sqlite3import timeimport time
def create_temp_dir(): name= 'fsb{}'.format(hex(time.time_ns())[2:]) os.mkdir(name) return name
def copy_file_temp(path): name= 'fsb{}'.format(hex(time.time_ns())[2:]) os.copy(path,name) return name
def super_rename(src,dst): parent = if not o
def create_hash_lookup(top): hashes = hasifiy(top) ret = {} for _hash in hashes: path,*two_hashes = _hash ret.setdefault(two_hashes,[]).append(path) return retdef 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.fetchall() return res
def restore(database,source,destination): con=sqlite3.connect(database) cur=con.cursor() temp = create_hash_lookup(source) hashes = hashify(source) for _hashes,paths in hashes.items(): search_results = lookup(cur,*_hashes)
ppath = os.path.join(source,path) qpath=lookup(cur,imohash,realhash) qpath=os.path.join(temp,qpath) parent = os.path.dirname(qpath) if not os.path.exists(parent): os.makedirs(parent) print(ppath,qpath,sep = '->') os.rename(ppath,qpath) os.rename(temp,destination)
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)
|