#!/usr/bin/env python import os, argparse from shutil import copyfile from datetime import datetime def get_options(): parser = argparse.ArgumentParser( description = 'Copy file with version number' ) parser.add_argument('-m', action = "store_true", dest = "move", help = "Move file instead of copying", default = False ) parser.add_argument('-d', action = "store_true", dest = "date", help = "Use file date+time as version number", default = False ) parser.add_argument(action = "store", dest = "file") return parser.parse_args() def get_version_name(full_path): """ Move file to versioned with integer """ file_dir = os.path.dirname(full_path) file_name = os.path.basename(full_path) basename, extension = os.path.splitext(file_name) version = 1 while True: new_name = os.path.join( file_dir, "%s.v%02d%s"%( basename, version, extension ) ) if os.path.exists(new_name): version += 1 else: break return new_name def get_date_name(full_path): """ Move file to versioned with integer """ file_dir = os.path.dirname(full_path) file_name = os.path.basename(full_path) basename, extension = os.path.splitext(file_name) file_time = os.stat(full_path).st_mtime time_formatted = datetime.fromtimestamp( file_time ).strftime("%Y%m%d_%H%M%S") new_name = os.path.join( file_dir, "%s.%s%s"%( basename, time_formatted, extension ) ) return new_name if __name__ == "__main__": opts = get_options() if os.path.isdir(opts.file): raise ValueError("Can not handle directories") if opts.date: new_name = get_date_name(opts.file) else: new_name = get_version_name(opts.file) print("%s -> %s"%( opts.file, new_name )) if opts.move: os.rename(opts.file, new_name) else: copyfile(opts.file, new_name)