2024-02-28 12:10:00 +02:00
#!/usr/bin/python
import os
import sys
import re
def preview_rename ( original_name , new_name ) :
print ( f " Preview: { original_name } -> { new_name } " )
def perform_rename ( original_name , new_name ) :
os . rename ( original_name , new_name )
print ( f " Renamed: { original_name } -> { new_name } " )
def main ( ) :
# Check if the regex is provided as an argument
if len ( sys . argv ) < 3 :
print ( " Please provide a regex pattern with show title, season, and episode groups. " )
sys . exit ( 1 )
# Get folder path from command-line argument if provided, else use current directory
folder_path = sys . argv [ 1 ] if len ( sys . argv ) > 1 else os . getcwd ( )
# Get the regex pattern from the command-line arguments
regex_pattern = sys . argv [ 2 ]
for filename in os . listdir ( folder_path ) :
# Check if the file is a regular file
if os . path . isfile ( os . path . join ( folder_path , filename ) ) :
# Use regex to extract show title, season, episode, and episode name
match = re . match ( regex_pattern , filename )
if match :
show_title = match . group ( 1 )
season_number = match . group ( 2 ) . zfill ( 2 )
episode_number = match . group ( 3 ) . zfill ( 2 )
# Check if there is a fourth group for episode name
episode_name_group = match . group ( 4 )
episode_name = f " - { episode_name_group } " if episode_name_group else " "
# Create the new filename in the desired format
2024-02-28 12:16:23 +02:00
new_filename = f " { show_title } S { season_number } E { episode_number } { episode_name } .avi " . strip ( )
2024-02-28 12:10:00 +02:00
# Preview the changes
preview_rename ( filename , new_filename )
# Ask for user confirmation
user_input = input ( " Do you want to proceed with the renaming? (y/n): " ) . lower ( )
if user_input == ' y ' :
# Perform the renaming
for filename in os . listdir ( folder_path ) :
if os . path . isfile ( os . path . join ( folder_path , filename ) ) :
match = re . match ( regex_pattern , filename )
if match :
show_title = match . group ( 1 )
season_number = match . group ( 2 ) . zfill ( 2 )
episode_number = match . group ( 3 ) . zfill ( 2 )
episode_name_group = match . group ( 4 )
episode_name = f " - { episode_name_group } " if episode_name_group else " "
new_filename = f " { show_title } S { season_number } E { episode_number } { episode_name } .avi "
perform_rename ( os . path . join ( folder_path , filename ) , os . path . join ( folder_path , new_filename ) )
else :
print ( " Renaming canceled. " )
if __name__ == " __main__ " :
if len ( sys . argv ) != 3 :
print ( " Usage: ./episodes.py <directory> <regex> \n In the regex, group 1 should be show title, group 2 season and group 3 episode, optionally group 4 for episode title. " )
sys . exit ( 1 )
main ( )