import os import re import sys import glob def strip_duplicate_suffix(filename): """Strips OS-generated duplicate suffixes like ' (2)', ' (3)' from a filename. Examples: 'video (2).mp4' -> 'video.mp4' 'video (3).mp4' -> 'video.mp4' 'video.mp4' -> 'video.mp4' """ name, ext = os.path.splitext(filename) cleaned = re.sub(r'\s+\(\d+\)$', '', name) return cleaned + ext def main(): # 1. Check arguments if len(sys.argv) < 2: print("Usage: python strip_suffix.py [more_files...]") return # 2. Parse arguments args = [arg.strip(' "\'') for arg in sys.argv[1:]] target_files = [] for arg in args: abs_arg = os.path.abspath(arg) if os.path.isfile(abs_arg): target_files.append(abs_arg) elif os.path.isdir(abs_arg): # Find all files in the directory for f in os.listdir(abs_arg): full_path = os.path.join(abs_arg, f) if os.path.isfile(full_path): target_files.append(full_path) else: print(f"Warning: '{arg}' does not exist.") if not target_files: print("Error: No valid files found to process.") return rename_count = 0 skip_count = 0 print("-" * 50) for filepath in target_files: directory = os.path.dirname(filepath) filename = os.path.basename(filepath) clean_name = strip_duplicate_suffix(filename) if clean_name != filename: clean_path = os.path.join(directory, clean_name) # Check if the target name already exists if os.path.exists(clean_path): print(f" SKIP: '{filename}' -> '{clean_name}' (target already exists)") skip_count += 1 continue os.rename(filepath, clean_path) print(f" RENAMED: '{filename}' -> '{clean_name}'") rename_count += 1 print("-" * 50) if rename_count == 0: print("No files with duplicate suffixes found.") else: print(f"Renamed {rename_count} file(s). Skipped {skip_count} file(s).") if __name__ == "__main__": main()