#!/usr/bin/python3 # This one really is Python 3 specific, though it could be modified for Python 2 easily. import sys import subprocess as subprocess_mod def usage(retval): sys.stderr.write("{} --save-directory /save/dir --help\n".format(sys.argv[0])) sys.exit(retval) def main(): save_directory = "" while sys.argv[1:]: if sys.argv[1] == '--save-directory': save_directory = sys.argv[2] del sys.argv[1] elif sys.argv[1] in [ '-h', '--help' ]: usage(0) else: sys.stderr.write('{}: Unrecognized option: {}\n'.format(sys.argv[0], sys.argv[1])) usage(1) del sys.argv[1] if save_directory == '': sys.stderr.write("{}: --save-directory is a required option\n".format(sys.argv[0])) usage(1) subprocess = subprocess_mod.Popen([ 'backshift', '--save-directory', save_directory, '--list-backups' ], stdout=subprocess_mod.PIPE) most_recent = {} num_fields = 4 for backup_description in subprocess.stdout: fields = backup_description.split() fields2 = [ str(field, 'ISO-8859-1') for field in fields ] (backup_id, start_ctime, file_count, finish_time) = fields2 #1387040404.46_dstromberg-laptop_just-slash_sat-dec-14-09-00-04-2013_bfbd278d27a995f5 subfields = backup_id.split('_') key = (subfields[1], subfields[2]) if int(file_count) >= 2 and finish_time != 'None': most_recent[key] = fields2 widths = [ 0 for fieldno in range(num_fields) ] for fields in most_recent.values(): for fieldno in range(num_fields): if len(fields[fieldno]) > widths[fieldno]: widths[fieldno] = len(fields[fieldno]) keys = list(most_recent) keys.sort() metaformats = [ '{{:<{}}}', '{{:<{}}}', '{{:>{}}}', '{{:<{}}}' ] for key in keys: fields = [] for fieldno in range(num_fields): format_string = metaformats[fieldno].format(widths[fieldno]) fields.append(format_string.format(most_recent[key][fieldno])) line = ' '.join(fields) sys.stdout.write(line + '\n') main()