80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
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 <path_to_file_or_folder> [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()
|