117 lines
5.2 KiB
Text
117 lines
5.2 KiB
Text
|
#!/Users/sij/miniforge3/bin/python
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
import argparse
|
||
|
|
||
|
def ask_for_confirmation(message):
|
||
|
while True:
|
||
|
user_input = input(message + " (y/n): ").strip().lower()
|
||
|
if user_input in ('y', 'n'):
|
||
|
return user_input == 'y'
|
||
|
else:
|
||
|
print("Invalid input. Please enter 'y' or 'n'.")
|
||
|
|
||
|
def rename_files_orig(root_dir, manual):
|
||
|
for dirpath, _, filenames in os.walk(root_dir, followlinks=False):
|
||
|
for filename in filenames:
|
||
|
if '(orig)' in filename:
|
||
|
orig_filepath = os.path.join(dirpath, filename)
|
||
|
base_filename, ext = os.path.splitext(filename)
|
||
|
new_filename = base_filename.replace('(orig)', '')
|
||
|
new_filepath = os.path.join(dirpath, new_filename + ext)
|
||
|
|
||
|
if os.path.exists(new_filepath):
|
||
|
new_file_new_name = new_filename + '(new)' + ext
|
||
|
new_file_new_path = os.path.join(dirpath, new_file_new_name)
|
||
|
|
||
|
if manual:
|
||
|
if not ask_for_confirmation(f"Do you want to rename {new_filepath} to {new_file_new_path}?"):
|
||
|
continue
|
||
|
|
||
|
if os.path.exists(new_file_new_path):
|
||
|
print(f"Error: Cannot rename {new_filepath} to {new_file_new_path} because the target file already exists.")
|
||
|
continue
|
||
|
|
||
|
os.rename(new_filepath, new_file_new_path)
|
||
|
print(f'Renamed: {new_filepath} -> {new_file_new_name}')
|
||
|
else:
|
||
|
print(f"No associated file found for: {orig_filepath}")
|
||
|
|
||
|
orig_file_new_name = new_filename + ext
|
||
|
orig_file_new_path = os.path.join(dirpath, orig_file_new_name)
|
||
|
|
||
|
if manual:
|
||
|
if not ask_for_confirmation(f"Do you want to rename {orig_filepath} to {orig_file_new_path}?"):
|
||
|
continue
|
||
|
|
||
|
if os.path.exists(orig_file_new_path):
|
||
|
print(f"Error: Cannot rename {orig_filepath} to {orig_file_new_path} because the target file already exists.")
|
||
|
continue
|
||
|
|
||
|
os.rename(orig_filepath, orig_file_new_path)
|
||
|
print(f'Renamed: {orig_filepath} -> {orig_file_new_name}')
|
||
|
|
||
|
def rename_files_new(root_dir, manual):
|
||
|
for dirpath, _, filenames in os.walk(root_dir, followlinks=False):
|
||
|
for filename in filenames:
|
||
|
if '(new)' in filename:
|
||
|
new_filepath = os.path.join(dirpath, filename)
|
||
|
base_filename, ext = os.path.splitext(filename)
|
||
|
orig_filename = base_filename.replace('(new)', '')
|
||
|
orig_filepath = os.path.join(dirpath, orig_filename + ext)
|
||
|
|
||
|
if os.path.exists(orig_filepath):
|
||
|
orig_file_orig_name = orig_filename + '(orig)' + ext
|
||
|
orig_file_orig_path = os.path.join(dirpath, orig_file_orig_name)
|
||
|
|
||
|
if manual:
|
||
|
if not ask_for_confirmation(f"Do you want to rename {orig_filepath} to {orig_file_orig_path}?"):
|
||
|
continue
|
||
|
|
||
|
if os.path.exists(orig_file_orig_path):
|
||
|
print(f"Error: Cannot rename {orig_filepath} to {orig_file_orig_path} because the target file already exists.")
|
||
|
continue
|
||
|
|
||
|
os.rename(orig_filepath, orig_file_orig_path)
|
||
|
print(f'Renamed: {orig_filepath} -> {orig_file_orig_name}')
|
||
|
else:
|
||
|
print(f"No associated file found for: {new_filepath}")
|
||
|
|
||
|
new_file_new_name = orig_filename + ext
|
||
|
new_file_new_path = os.path.join(dirpath, new_file_new_name)
|
||
|
|
||
|
if manual:
|
||
|
if not ask_for_confirmation(f"Do you want to rename {new_filepath} to {new_file_new_path}?"):
|
||
|
continue
|
||
|
|
||
|
if os.path.exists(new_file_new_path):
|
||
|
print(f"Error: Cannot rename {new_filepath} to {new_file_new_path} because the target file already exists.")
|
||
|
continue
|
||
|
|
||
|
os.rename(new_filepath, new_file_new_path)
|
||
|
print(f'Renamed: {new_filepath} -> {new_file_new_name}')
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
parser = argparse.ArgumentParser(description='Rename files based on given criteria.')
|
||
|
parser.add_argument('-o', '--orig', action='store_true', help='Rename files ending with (orig)')
|
||
|
parser.add_argument('-n', '--new', action='store_true', help='Rename files ending with (new)')
|
||
|
parser.add_argument('-m', '--manual', action='store_true', help='Manual mode: ask for confirmation before each renaming')
|
||
|
parser.add_argument('directory', nargs='?', default=os.getcwd(), help='Directory to start the search (default: current directory)')
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
if args.orig and args.new:
|
||
|
print("Error: Please specify either -o or -n, not both.")
|
||
|
sys.exit(1)
|
||
|
|
||
|
if args.orig:
|
||
|
print("Running in ORIG mode")
|
||
|
rename_files_orig(args.directory, args.manual)
|
||
|
elif args.new:
|
||
|
print("Running in NEW mode")
|
||
|
rename_files_new(args.directory, args.manual)
|
||
|
else:
|
||
|
print("Error: Please specify either -o or -n.")
|
||
|
sys.exit(1)
|
||
|
|