#!/usr/bin/env python3 import sys import re from pathlib import Path EP_REGEX = re.compile(r'(E)(\d{4})(.*)') def main(): args = sys.argv[1:] dry_run = False if args and args[0] in ("--dry-run", "-n"): dry_run = True args = args[1:] if len(args) != 3: print("Usage: script.py [--dry-run|-n] ") sys.exit(1) directory = Path(args[0]) threshold = int(args[1]) subtract = int(args[2]) if not directory.is_dir(): print(f"Error: '{directory}' is not a directory.") sys.exit(1) # Step 1: build array of original filenames and parsed numbers old_array = [] for f in sorted(directory.iterdir()): if not f.is_file(): continue m = EP_REGEX.match(f.name) if m: prefix, num_str, rest = m.groups() num = int(num_str) old_array.append([prefix, num, rest]) # Step 2: compute new filenames new_array = [] for prefix, num, rest in old_array: if num >= threshold: new_num = num - subtract else: new_num = num if new_num < 0 or new_num > 9999: raise ValueError(f"Invalid resulting number for file: {prefix}{num:04d}{rest}") new_array.append([prefix, new_num, rest]) if subtract < 0: new_array.reverse() old_array.reverse() # Step 3: sequential rename simulation / real rename for i in range(len(old_array)): old_name = f"{old_array[i][0]}{old_array[i][1]:04d}{old_array[i][2]}" new_name = f"{new_array[i][0]}{new_array[i][1]:04d}{new_array[i][2]}" for j in range(i): if old_array[j][0] == new_array[i][0] and old_array[j][1] == new_array[i][1] and old_array[j][2] == new_array[i][2]: raise RuntimeError( f"Rename conflict in simulation:\n Source: {old_name}\n Target: {new_name}\n Conflicts with: {old_array[j][0]}{old_array[j][1]:04d}{old_array[j][2]}" ) if old_array[j][1] > new_array[i][1]: break print(f"\"{old_name}\" -> \"{new_name}\"", end=" ") if old_name == new_name: print("Skipped") continue else: print() # Update simulated old_array to reflect that this file has been "renamed" old_array[i][1] = new_array[i][1] # Actually rename unless dry-run if not dry_run: target_path = directory / new_name if target_path.exists(): raise RuntimeError(f"Rename would overwrite existing file on disk:\n Source: {old_name}\n Target: {new_name}") (directory / old_name).rename(target_path) if dry_run: print("Dry-run complete. No files were renamed.") else: print("Done.") if __name__ == "__main__": import subprocess subprocess.run(["python", "/home/honney/.bin/tracker.py", "add", "substract_episode_num"]) main()