From 953fa35806ee5d9789b1ad029966ca0e9491bbe6 Mon Sep 17 00:00:00 2001 From: ville rantanen Date: Sat, 10 Mar 2018 17:56:28 +0200 Subject: [PATCH] viery simple file versionizer --- bin/cp-version | 1 + files/cp-version.py | 48 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 120000 bin/cp-version create mode 100755 files/cp-version.py diff --git a/bin/cp-version b/bin/cp-version new file mode 120000 index 0000000..bc9549d --- /dev/null +++ b/bin/cp-version @@ -0,0 +1 @@ +../files/cp-version.py \ No newline at end of file diff --git a/files/cp-version.py b/files/cp-version.py new file mode 100755 index 0000000..5165892 --- /dev/null +++ b/files/cp-version.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +import os, argparse +from shutil import copyfile + +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(action = "store", dest = "file") + return parser.parse_args() + + +def file_versionize(full_path, move = False): + """ 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 + print("%s -> %s"%( + full_path, + new_name + )) + if move: + os.rename(full_path, new_name) + else: + copyfile(full_path, new_name) + + +if __name__ == "__main__": + opts = get_options() + file_versionize(opts.file, opts.move)