#!/usr/bin/env python3 import argparse import os import re def _main(): example_dir = os.path.dirname(__file__) args = _parse_args() renames = [] for name in sorted(os.listdir(example_dir)): path = os.path.join(example_dir, name) match = re.match("([0-9]+)(-.*)", name) if os.path.isdir(path) and match is not None: old_number = int(match[1]) is_in_range = ( (args.from_number is None or args.from_number <= old_number) and (args.to_number is None or old_number <= args.to_number) ) if is_in_range: new_number = old_number + args.delta new_name = f"{new_number:02}{match[2]}" new_path = os.path.join(example_dir, new_name) print(f"{name} -> {new_name}") if os.path.exists(new_path): raise ValueError("destination already exists") renames.append((path, new_path)) for old_path, new_path in renames: os.rename(old_path, new_path) def _parse_args(): parser = argparse.ArgumentParser() parser.add_argument("--delta", required=True, type=int) parser.add_argument("--from", required=False, type=int, dest="from_number") parser.add_argument("--to", required=False, type=int, dest="to_number") return parser.parse_args() if __name__ == "__main__": _main()