-
-
Save colinux/799510 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# Renames subtitles files according to tv shows names found in a directory | |
# Acceped syntaxes for season/episode are: 304, s3e04, s03e04, 3x04 (case insensitive) | |
# | |
# Usage: | |
# Put this gist somewhere in your $PATH, like /usr/local/bin/subtitles-renamer | |
# Chmod +x it | |
# cd ~/YourHolidaysTvShowsWithSubtitles | |
# subtitles-renamer | |
# | |
# Note: zipfiles will be unzipped and .zip will be removed | |
# | |
# There are bashisms to work with regular expressions, | |
# so you really need bash or a shell compatible | |
# unzip files, maybe there are subtitles in it... | |
for f in *.zip; do | |
if [ -e "$f" ]; then | |
unzip "$f" | |
rm "$f" | |
fi | |
done | |
# switch into case insensitive | |
shopt -s nocasematch | |
# search subtitles | |
for f in *.{srt,ssa,sub} ; do | |
if [ -e "$f" ]; then | |
if [[ "$f" =~ s([0-9]+)e([0-9]+) || "$f" =~ ([0-9]+)x([0-9]+) || "$f" =~ ([0-9]+)([0-9][0-9]) ]]; then | |
echo "Found '$f'" | |
let SEASON="10#${BASH_REMATCH[1]}" # eventually delete leading 0 | |
EPISODE=${BASH_REMATCH[2]} | |
# search for a matching film | |
for movie in *.{avi,mkv} ; do | |
if [ -e "$movie" ]; then | |
if [[ "$movie" =~ ${SEASON}${EPISODE} || "$movie" =~ s0?${SEASON}e${EPISODE} || "$movie" =~ ${SEASON}x${EPISODE} ]]; then | |
NEW_NAME=`echo "${movie%.*}.${f##*.}"` | |
if [ "$f" = "${NEW_NAME}" ]; then | |
echo " Already ok" | |
elif [ -e "${NEW_NAME}" ]; then | |
echo " A file named '${NEW_NAME}' already exist, skipping" | |
else | |
mv "$f" "${NEW_NAME}" | |
echo " Renamed '$f' in '${NEW_NAME}'" | |
fi | |
break; | |
fi | |
fi | |
done | |
fi | |
fi | |
done | |
# reswitch into case sensitive | |
shopt -u nocasematch | |
exit 0 |
Nice script!
Thanks.
Perfect, mate !
I've added some formats to movies, like m4v and iso
added mds to subs
if you need to run it through all directories recursively:
find . -type d -exec bash -c "cd '{}' && /path/to/script.sh" \;
Thanks for great script!
Thanks! I'm glad I've searched Google before writing such a script myself :)
wow you saved my day ;)
Love the script!
I wrote a simple python script that basically just renames the subtitle files to the video files found in the directory.
https://github.com/Eshaan7/RenameThemSubs
Tested in 2019, tks
works, thanks
There are some issues with renaming S01E08 when you also have 1080p in the filename.
There are some issues with renaming S01E08 when you also have 1080p in the filename.
I would suggest to change order in condition:
if [[ "$f" =~ s([0-9]+)e([0-9]+) || "$f" =~ ([0-9]+)x([0-9]+) || "$f" =~ ([0-9]+)([0-9][0-9]) ]]; then
Great! It working with east-european charaters also!
Wonderful! Thank you.
can you add some code for extract RAR files, please
There are some issues with renaming S01E08 when you also have 1080p in the filename.
"Acceped syntaxes for season/episode are: 304..." This one conflict with 1080p in filenames (e08). Was unable to fix, so simply removed that option in the code:
if [[ "$f" =~ s([0-9]+)e([0-9]+) || "$f" =~ ([0-9]+)x([0-9]+) || "$f" =~ ([0-9]+)([0-9][0-9]) ]]; then
changed to
if [[ "$f" =~ s([0-9]+)e([0-9]+) || "$f" =~ ([0-9]+)x([0-9]+) ]]; then
_
if [[ "$movie" =~ ${SEASON}${EPISODE} || "$movie" =~ s0?${SEASON}e${EPISODE} || "$movie" =~ ${SEASON}x${EPISODE} ]]; then
changed to
if [[ "$movie" =~ s0?${SEASON}e${EPISODE} || "$movie" =~ ${SEASON}x${EPISODE} ]]; then
Awesome, Thanks.
Also, @isevcik this:
I would suggest to change order in condition:
if [[ "$f" =~ s([0-9]+)e([0-9]+) || "$f" =~ ([0-9]+)x([0-9]+) || "$f" =~ ([0-9]+)([0-9][0-9]) ]]; then
helped too.
awesome!!! thanks
Super, je testerai ça un de ces prochains jours. Merci