#!/usr/bin/env python3 # Copyright (c) 2018, Paul Lecuq # All rights reserved. # BSD Licensed # Matrix is a small program that saves permissions on directory to a file and can restore it # on another directory (or another machine) import os import argparse mode = "" backup_file = "" rep = "" parser = argparse.ArgumentParser(description='Parse arguments') parser.add_argument('mode', metavar='mode', type=str, choices=['backup','restore'], help='Mode') parser.add_argument('backup_file', metavar='backup_file', type=str, help='Backup file') parser.add_argument('directory', metavar='directory', type=str, help='Directory') args = parser.parse_args() mode = args.mode backup_file = args.backup_file directory = args.directory def backup(): fd = open(backup_file,"w+") result=[] for rd,dr,fs in os.walk(directory): for d in dr: res = os.path.join(rd, d) result.append(res) for f in fs: res = os.path.join(rd, f) result.append(res) for f_name_tmp in result: try: f_name = f_name_tmp.lstrip(directory) f_perm = str(oct(os.stat(f_name_tmp).st_mode)) line = "%s|%s\n" % (f_name,f_perm) fd.write(line) except OSError: pass fd.close() def restore(): fd = open(backup_file,"r+") for f in fd: line = f.strip("\n") f_name_tmp = line.split('|')[0] f_name = "%s/%s" % (directory,f_name_tmp) f_perm = line.split('|')[1] try: os.chmod(f_name,int(f_perm,8)) except OSError: pass if mode == "backup": backup() elif mode == "restore": restore()