405 lines
16 KiB
Python
Executable File
405 lines
16 KiB
Python
Executable File
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
##
|
|
## @author Edouard DUPIN
|
|
##
|
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
|
##
|
|
## @license APACHE v2.0 (see license file)
|
|
##
|
|
|
|
import os
|
|
import shutil
|
|
import errno
|
|
import fnmatch
|
|
import stat
|
|
import sys
|
|
import subprocess
|
|
import shlex
|
|
import re
|
|
import copy
|
|
|
|
##
|
|
## @brief Execute the command with no get of output
|
|
##
|
|
def run_command(cmd_line):
|
|
# prepare command line:
|
|
args = shlex.split(cmd_line)
|
|
print("[INFO] cmd = " + str(args))
|
|
try:
|
|
# create the subprocess
|
|
p = subprocess.Popen(args)
|
|
except subprocess.CalledProcessError as e:
|
|
print("[ERROR] subprocess.CalledProcessError : " + str(args))
|
|
return False
|
|
#except:
|
|
# debug.error("Exception on : " + str(args))
|
|
# launch the subprocess:
|
|
output, err = p.communicate()
|
|
# Check error :
|
|
if p.returncode == 0:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
|
|
##
|
|
## @brief Get list of all Files in a specific path (with a regex)
|
|
## @param[in] path (string) Full path of the machine to search files (start with / or x:)
|
|
## @param[in] regex (string) Regular expression to search data
|
|
## @param[in] recursive (bool) List file with recursive search
|
|
## @param[in] remove_path (string) Data to remove in the path
|
|
## @return (list) return files requested
|
|
##
|
|
def get_list_of_file_in_path(path, filter, recursive = False, remove_path=""):
|
|
out = []
|
|
if os.path.isdir(os.path.realpath(path)):
|
|
tmp_path = os.path.realpath(path)
|
|
else:
|
|
print("[E] path does not exist : '" + str(path) + "'")
|
|
|
|
for root, dirnames, filenames in os.walk(tmp_path):
|
|
deltaRoot = root[len(tmp_path):]
|
|
while len(deltaRoot) > 0 \
|
|
and ( deltaRoot[0] == '/' \
|
|
or deltaRoot[0] == '\\' ):
|
|
deltaRoot = deltaRoot[1:]
|
|
if recursive == False \
|
|
and deltaRoot != "":
|
|
return out
|
|
tmpList = []
|
|
for elem in filter:
|
|
tmpppp = fnmatch.filter(filenames, elem)
|
|
for elemmm in tmpppp:
|
|
tmpList.append(elemmm)
|
|
# Import the module :
|
|
for cycleFile in tmpList:
|
|
#for cycleFile in filenames:
|
|
add_file = os.path.join(tmp_path, deltaRoot, cycleFile)
|
|
if len(remove_path) != 0:
|
|
if add_file[:len(remove_path)] != remove_path:
|
|
print("[E] Request remove start of a path that is not the same: '" + add_file[:len(remove_path)] + "' demand remove of '" + str(remove_path) + "'")
|
|
else:
|
|
add_file = add_file[len(remove_path)+1:]
|
|
out.append(add_file)
|
|
return out;
|
|
|
|
|
|
list_auto_replace = [
|
|
"Chuggington",
|
|
"Caliméro",
|
|
"Le livre de la jungle",
|
|
"Barbapapa",
|
|
"Oum le dauphin blanc",
|
|
"Les Minijusticiers",
|
|
"Octonauts",
|
|
"Les Enquêtes de Mirette",
|
|
"Julius Jr",
|
|
"Paw Patrol, la Pat'Patrouille",
|
|
"Rusty Rivets"
|
|
]
|
|
|
|
def change_order_special(data):
|
|
basic_dir = os.path.dirname(data)
|
|
tmp = os.path.basename(data)
|
|
for elem in list_auto_replace:
|
|
if tmp[-len(elem)-3:] == " - " + elem:
|
|
tmp = elem + " - " + tmp[:-len(elem)-3]
|
|
print("")
|
|
print("")
|
|
print("")
|
|
print("")
|
|
print("")
|
|
print("*************************************************************************")
|
|
print("replace : " + data)
|
|
print(" : " + os.path.join(basic_dir,tmp))
|
|
return os.path.join(basic_dir,tmp)
|
|
return data
|
|
|
|
|
|
def rm_date(data):
|
|
val = data.split("_France 2_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_France 3_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_France 4_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_France 5_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_France O_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_France Ô_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_NT1_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_TF1_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_TF1_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_TFX_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_TMC_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_Gulli_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
val = data.split("_Arte_")
|
|
if len(val) == 2:
|
|
return val[0]
|
|
return data
|
|
|
|
def replace_generic_saison_and_name(data):
|
|
for elem in [ "1", "2", "3", "4", "5", "6", "7", "8", "9"]:
|
|
data = data.replace("S0" + elem + "E01", "- Saison " + elem + " Episode 1 -");
|
|
data = data.replace("S0" + elem + "E02", "- Saison " + elem + " Episode 2 -");
|
|
data = data.replace("S0" + elem + "E03", "- Saison " + elem + " Episode 3 -");
|
|
data = data.replace("S0" + elem + "E04", "- Saison " + elem + " Episode 4 -");
|
|
data = data.replace("S0" + elem + "E05", "- Saison " + elem + " Episode 5 -");
|
|
data = data.replace("S0" + elem + "E06", "- Saison " + elem + " Episode 6 -");
|
|
data = data.replace("S0" + elem + "E07", "- Saison " + elem + " Episode 7 -");
|
|
data = data.replace("S0" + elem + "E08", "- Saison " + elem + " Episode 8 -");
|
|
data = data.replace("S0" + elem + "E09", "- Saison " + elem + " Episode 9 -");
|
|
data = data.replace("S0" + elem + "E10", "- Saison " + elem + " Episode 10 -");
|
|
data = data.replace("S0" + elem + "E11", "- Saison " + elem + " Episode 11 -");
|
|
data = data.replace("S0" + elem + "E12", "- Saison " + elem + " Episode 12 -");
|
|
data = data.replace("S0" + elem + "E13", "- Saison " + elem + " Episode 13 -");
|
|
data = data.replace("S0" + elem + "E14", "- Saison " + elem + " Episode 14 -");
|
|
data = data.replace("S0" + elem + "E15", "- Saison " + elem + " Episode 15 -");
|
|
data = data.replace("S0" + elem + "E16", "- Saison " + elem + " Episode 16 -");
|
|
data = data.replace("S0" + elem + "E17", "- Saison " + elem + " Episode 17 -");
|
|
data = data.replace("S0" + elem + "E18", "- Saison " + elem + " Episode 18 -");
|
|
data = data.replace("S0" + elem + "E19", "- Saison " + elem + " Episode 19 -");
|
|
data = data.replace("S0" + elem + "E20", "- Saison " + elem + " Episode 20 -");
|
|
data = data.replace("S0" + elem + "E21", "- Saison " + elem + " Episode 21 -");
|
|
data = data.replace("S0" + elem + "E22", "- Saison " + elem + " Episode 22 -");
|
|
data = data.replace("S0" + elem + "E23", "- Saison " + elem + " Episode 23 -");
|
|
data = data.replace("S0" + elem + "E24", "- Saison " + elem + " Episode 24 -");
|
|
data = data.replace("S0" + elem + "E25", "- Saison " + elem + " Episode 25 -");
|
|
data = data.replace("S0" + elem + "E26", "- Saison " + elem + " Episode 26 -");
|
|
data = data.replace("S0" + elem + "E27", "- Saison " + elem + " Episode 27 -");
|
|
data = data.replace("S0" + elem + "E28", "- Saison " + elem + " Episode 28 -");
|
|
data = data.replace("S0" + elem + "E29", "- Saison " + elem + " Episode 29 -");
|
|
data = data.replace("S0" + elem + "E30", "- Saison " + elem + " Episode 30 -");
|
|
data = data.replace("S0" + elem + "E31", "- Saison " + elem + " Episode 31 -");
|
|
data = data.replace("S0" + elem + "E32", "- Saison " + elem + " Episode 32 -");
|
|
data = data.replace("S0" + elem + "E33", "- Saison " + elem + " Episode 33 -");
|
|
data = data.replace("S0" + elem + "E34", "- Saison " + elem + " Episode 34 -");
|
|
data = data.replace("S0" + elem + "E35", "- Saison " + elem + " Episode 35 -");
|
|
data = data.replace("S0" + elem + "E36", "- Saison " + elem + " Episode 36 -");
|
|
data = data.replace("S0" + elem + "E37", "- Saison " + elem + " Episode 37 -");
|
|
data = data.replace("S0" + elem + "E38", "- Saison " + elem + " Episode 38 -");
|
|
data = data.replace("S0" + elem + "E39", "- Saison " + elem + " Episode 39 -");
|
|
data = data.replace("S0" + elem + "E40", "- Saison " + elem + " Episode 40 -");
|
|
data = data.replace("S0" + elem + "E41", "- Saison " + elem + " Episode 41 -");
|
|
data = data.replace("S0" + elem + "E42", "- Saison " + elem + " Episode 42 -");
|
|
data = data.replace("S0" + elem + "E43", "- Saison " + elem + " Episode 43 -");
|
|
data = data.replace("S0" + elem + "E44", "- Saison " + elem + " Episode 44 -");
|
|
data = data.replace("S0" + elem + "E45", "- Saison " + elem + " Episode 45 -");
|
|
data = data.replace("S0" + elem + "E46", "- Saison " + elem + " Episode 46 -");
|
|
data = data.replace("S0" + elem + "E47", "- Saison " + elem + " Episode 47 -");
|
|
data = data.replace("S0" + elem + "E48", "- Saison " + elem + " Episode 48 -");
|
|
data = data.replace("S0" + elem + "E49", "- Saison " + elem + " Episode 49 -");
|
|
data = data.replace("S0" + elem + "E50", "- Saison " + elem + " Episode 50 -");
|
|
data = data.replace("S0" + elem + "E51", "- Saison " + elem + " Episode 51 -");
|
|
data = data.replace("S0" + elem + "E52", "- Saison " + elem + " Episode 52 -");
|
|
data = data.replace("S0" + elem + "E53", "- Saison " + elem + " Episode 53 -");
|
|
data = data.replace("S0" + elem + "E54", "- Saison " + elem + " Episode 54 -");
|
|
data = data.replace("S0" + elem + "E55", "- Saison " + elem + " Episode 55 -");
|
|
data = data.replace("S0" + elem + "E56", "- Saison " + elem + " Episode 56 -");
|
|
data = data.replace("S0" + elem + "E57", "- Saison " + elem + " Episode 57 -");
|
|
data = data.replace("S0" + elem + "E58", "- Saison " + elem + " Episode 58 -");
|
|
data = data.replace("S0" + elem + "E59", "- Saison " + elem + " Episode 59 -");
|
|
data = data.replace("S0" + elem + "E60", "- Saison " + elem + " Episode 60 -");
|
|
data = data.replace("S0" + elem + "E61", "- Saison " + elem + " Episode 61 -");
|
|
data = data.replace("S0" + elem + "E62", "- Saison " + elem + " Episode 62 -");
|
|
data = data.replace("S0" + elem + "E63", "- Saison " + elem + " Episode 63 -");
|
|
data = data.replace("S0" + elem + "E64", "- Saison " + elem + " Episode 64 -");
|
|
data = data.replace("S0" + elem + "E65", "- Saison " + elem + " Episode 65 -");
|
|
data = data.replace("S0" + elem + "E66", "- Saison " + elem + " Episode 66 -");
|
|
data = data.replace("S0" + elem + "E67", "- Saison " + elem + " Episode 67 -");
|
|
data = data.replace("S0" + elem + "E68", "- Saison " + elem + " Episode 68 -");
|
|
data = data.replace("S0" + elem + "E69", "- Saison " + elem + " Episode 69 -");
|
|
data = data.replace("S0" + elem + "E70", "- Saison " + elem + " Episode 70 -");
|
|
data = data.replace("S0" + elem + "E71", "- Saison " + elem + " Episode 71 -");
|
|
data = data.replace("S0" + elem + "E72", "- Saison " + elem + " Episode 72 -");
|
|
data = data.replace("S0" + elem + "E73", "- Saison " + elem + " Episode 73 -");
|
|
data = data.replace("S0" + elem + "E74", "- Saison " + elem + " Episode 74 -");
|
|
data = data.replace("S0" + elem + "E75", "- Saison " + elem + " Episode 75 -");
|
|
data = data.replace("S0" + elem + "E76", "- Saison " + elem + " Episode 76 -");
|
|
data = data.replace("S0" + elem + "E77", "- Saison " + elem + " Episode 77 -");
|
|
data = data.replace("S0" + elem + "E78", "- Saison " + elem + " Episode 78 -");
|
|
data = data.replace("S0" + elem + "E79", "- Saison " + elem + " Episode 79 -");
|
|
data = data.replace("S0" + elem + "E80", "- Saison " + elem + " Episode 80 -");
|
|
data = data.replace("S0" + elem + "E81", "- Saison " + elem + " Episode 81 -");
|
|
data = data.replace("S0" + elem + "E82", "- Saison " + elem + " Episode 82 -");
|
|
data = data.replace("S0" + elem + "E83", "- Saison " + elem + " Episode 83 -");
|
|
data = data.replace("S0" + elem + "E84", "- Saison " + elem + " Episode 84 -");
|
|
data = data.replace("S0" + elem + "E85", "- Saison " + elem + " Episode 85 -");
|
|
data = data.replace("S0" + elem + "E86", "- Saison " + elem + " Episode 86 -");
|
|
data = data.replace("S0" + elem + "E87", "- Saison " + elem + " Episode 87 -");
|
|
data = data.replace("S0" + elem + "E88", "- Saison " + elem + " Episode 88 -");
|
|
data = data.replace("S0" + elem + "E89", "- Saison " + elem + " Episode 89 -");
|
|
data = data.replace("S0" + elem + "E90", "- Saison " + elem + " Episode 90 -");
|
|
data = data.replace("S0" + elem + "E91", "- Saison " + elem + " Episode 91 -");
|
|
data = data.replace("S0" + elem + "E92", "- Saison " + elem + " Episode 92 -");
|
|
data = data.replace("S0" + elem + "E93", "- Saison " + elem + " Episode 93 -");
|
|
data = data.replace("S0" + elem + "E94", "- Saison " + elem + " Episode 94 -");
|
|
data = data.replace("S0" + elem + "E95", "- Saison " + elem + " Episode 95 -");
|
|
data = data.replace("S0" + elem + "E96", "- Saison " + elem + " Episode 96 -");
|
|
data = data.replace("S0" + elem + "E97", "- Saison " + elem + " Episode 97 -");
|
|
data = data.replace("S0" + elem + "E98", "- Saison " + elem + " Episode 98 -");
|
|
data = data.replace("S0" + elem + "E99", "- Saison " + elem + " Episode 99 -");
|
|
data = data.replace("sXX-e99", " - ");
|
|
return data
|
|
|
|
def rename_group(list_element, extention):
|
|
for elem in list_files:
|
|
reduced_name = rm_date(elem[:-(len(extention)+1)])
|
|
reduced_name = change_order_special(reduced_name)
|
|
reduced_name = replace_generic_saison_and_name(reduced_name)
|
|
print("file: " + reduced_name)
|
|
# remove the date in the channel ...
|
|
val = reduced_name.split(" - ")
|
|
if len(val) == 1:
|
|
#standard film ...
|
|
print(" FILM")
|
|
if val[0] + "." + extention != elem:
|
|
print(" ==> rename ...")
|
|
print(" " + elem)
|
|
print(" " + val[0] + "." + extention)
|
|
out = val[0] + "." + extention
|
|
if os.path.isfile(out):
|
|
print(" " + out + " ==> exist ...")
|
|
offset = 0
|
|
while offset < 98:
|
|
offset += 1
|
|
out = val[0] + "__________" + str(offset) + "." + extention
|
|
if os.path.isfile(out):
|
|
print(" " + out + " ==> exist ...")
|
|
else:
|
|
break
|
|
if offset >= 98:
|
|
print(" " + out + " ==> Cen not move ...")
|
|
continue
|
|
cmd_line = "mv " + elem.replace(" ", "\ ").replace("'", "\\'") + " " + out.replace(" ", "\ ").replace("'", "\\'")
|
|
ret = run_command(cmd_line)
|
|
elif len(val) == 2:
|
|
print(" ?2?")
|
|
valll = val[0] + "-sXX-eXX-" + val[1]
|
|
if valll + "." + extention != elem:
|
|
print(" ==> rename ...")
|
|
print(" " + elem)
|
|
print(" " + valll + "." + extention)
|
|
out = valll + "." + extention
|
|
if os.path.isfile(out):
|
|
offset = 0
|
|
while offset < 98:
|
|
offset += 1
|
|
out = valll + "__________" + str(offset) + "." + extention
|
|
if os.path.isfile(out):
|
|
print(" " + out + " ==> exist ...")
|
|
else:
|
|
break
|
|
if offset >= 98:
|
|
print(" " + out + " ==> Cen not move ...")
|
|
continue
|
|
cmd_line = "mv " + elem.replace(" ", "\ ").replace("'", "\\'") + " " + out.replace(" ", "\ ").replace("'", "\\'")
|
|
ret = run_command(cmd_line)
|
|
|
|
elif val[1][:6] == "Saison" \
|
|
or val[1][1:7] == "pisode":
|
|
# remove space ... not needed to parse ...
|
|
tmp = val[1].replace(" ", "")
|
|
saison_id = -1
|
|
episode_id = -1
|
|
if tmp[:6] == "Saison":
|
|
# start with saison ...
|
|
tmp = tmp[6:]
|
|
parts = tmp.split("pisode")
|
|
if len(parts) == 1:
|
|
# only the saison ID
|
|
saison_id = int(parts[0])
|
|
else:
|
|
vallllll = ""
|
|
for vvv in parts[0]:
|
|
if vvv not in "0123456789":
|
|
break
|
|
vallllll += vvv
|
|
saison_id = int(vallllll)
|
|
while len(parts[1]) > 0 and parts[1][0] not in "0123456789":
|
|
parts[1] = parts[1][1:]
|
|
episode_id = int(parts[1])
|
|
else:
|
|
# start with Episode
|
|
while len(tmp) > 0 and tmp[0] not in "0123456789":
|
|
tmp = tmp[1:]
|
|
parts = tmp.split("Saison")
|
|
if len(parts) == 1:
|
|
# only the Episode ID
|
|
episode_id = int(parts[0])
|
|
else:
|
|
saison_id = int(parts[1])
|
|
episode_id = int(parts[0])
|
|
print(" SERIE TV")
|
|
special_element = "s"
|
|
if saison_id == -1:
|
|
special_element += "XX"
|
|
elif saison_id < 10:
|
|
special_element += "0" + str(saison_id)
|
|
else:
|
|
special_element += str(saison_id)
|
|
special_element += "-e"
|
|
if episode_id == -1:
|
|
special_element += "XX"
|
|
elif episode_id < 10:
|
|
special_element += "0" + str(episode_id)
|
|
else:
|
|
special_element += str(episode_id)
|
|
|
|
valll = val[0] + "-" + special_element + "-" + val[2]
|
|
if valll + "." + extention != elem:
|
|
print(" ==> rename ...")
|
|
print(" " + elem)
|
|
print(" " + valll + "." + extention)
|
|
out = valll + "." + extention
|
|
if os.path.isfile(out):
|
|
print(" " + out + " ==> exist ...")
|
|
offset = 0
|
|
while offset < 98:
|
|
offset += 1
|
|
out = valll + "__________" + str(offset) + "." + extention
|
|
if os.path.isfile(out):
|
|
print(" " + out + " ==> exist ...")
|
|
else:
|
|
break
|
|
if offset >= 98:
|
|
print(" " + out + " ==> Cen not move ...")
|
|
continue
|
|
cmd_line = "mv " + elem.replace(" ", "\ ").replace("'", "\\'") + " " + out.replace(" ", "\ ").replace("'", "\\'")
|
|
ret = run_command(cmd_line)
|
|
|
|
else:
|
|
print(" ??????????????")
|
|
|
|
|
|
for extention in ["ts","avi","mkv","mp4"]:
|
|
list_files = get_list_of_file_in_path(".", ["*."+extention])
|
|
|
|
rename_group(list_files, extention)
|
|
|
|
|
|
|
|
|