vinanrra 0 Posted February 15, 2019 Posted February 15, 2019 (edited) Original source Unix.stackexchange.com Thx to Adrian for this amazing script Since Emby doesnt have a proper scraper this will help to "fix" that Files to be renamed are all of the form [<tag>] <name> - <serial> [<quality>].mkv. Each anime has a lookup file called <name>.lst, listing the episodes in serial order, e.g. One Piece.lst contains: S01E01 S01E02 ... S01E08 S02E01 ... You use a bash shell at version 4 (minimum). #!/bin/bash # USAGE: canon_vids <dir> ... # Canonicalize the filenames of all MKV vids in each <dir> # All the anime lookup tables are in the lookup subdirectory # where canon_vids is stored lookup_dir="$(dirname "$0")/lookup" log_skip() { echo "SKIP ($1): $2" } find "$@" -name \*.mkv | while read f; do # Check filename against our desired pattern # (We don't want to rename what's already been renamed!) if [[ $f =~ /(\[[^]]+\])\ (.*)\ -\ ([0-9]+)\ (\[[^]]+\].mkv) ]]; then # We've now split our filename into: prefix="${BASH_REMATCH[1]}" name="${BASH_REMATCH[2]}" serial="${BASH_REMATCH[3]##0}" suffix="${BASH_REMATCH[4]}" # Some sanity checks if (( serial <= 0 )); then log_skip "$f" "Invalid serial# '$serial' for $name"; continue fi # Let's look up the episode episode="$(sed -n ${serial}p "$lookup_dir/${name}.lst")" if [[ -z "$episode" ]]; then log_skip "$f" "Can't find serial# '$serial' for $name"; continue fi mv -vn "$f" "${f%/*}/${prefix} ${name} - ${episode} ${suffix}" fi done And here's a bonus script that generates those lookup files, given the number of episodes in each season: #!/bin/bash # USAGE: generate_series <#eps> ... while [[ $1 ]]; do ((s++)) for e in $(seq "$1"); do printf "S%02dE%02d\n" $s $e done shift done Example: $ ls canon_vids generate_series # Create One Piece lookup table $ mkdir lookup $ ./generate_series 8 22 17 13 9 22 39 13 52 31 99 56 100 35 62 49 118 33 96 > lookup/One\ Piece.lst $ tail -n lookup/One\ Piece.lst S19E92 S19E93 S19E94 S19E95 S19E96 $ wc -l lookup/One\ Piece.lst 874 lookup/One Piece.lst # Create fake One Piece MKVs (adding a couple more to trigger errors) $ mkdir op $ for i in $(seq 0 876); do touch "$(printf "op/[TAG] One Piece - %02d [quality].mkv" $i)"; done $ ls op | wc -l 877 # And now, the moment of truth... $ ./canon_vids op renamed 'op/[TAG] One Piece - 724 [quality].mkv' -> 'op/[TAG] One Piece - S17E97 [quality].mkv' renamed 'op/[TAG] One Piece - 86 [quality].mkv' -> 'op/[TAG] One Piece - S06E17 [quality].mkv' ... renamed 'op/[TAG] One Piece - 819 [quality].mkv' -> 'op/[TAG] One Piece - S19E41 [quality].mkv' SKIP (op/[TAG] One Piece - 00 [quality].mkv): Invalid serial# '0' for One Piece renamed 'op/[TAG] One Piece - 52 [quality].mkv' -> 'op/[TAG] One Piece - S04E05 [quality].mkv' ... renamed 'op/[TAG] One Piece - 865 [quality].mkv' -> 'op/[TAG] One Piece - S19E87 [quality].mkv' SKIP (op/[TAG] One Piece - 875 [quality].mkv): Can't find serial# '875' for One Piece renamed 'op/[TAG] One Piece - 295 [quality].mkv' -> 'op/[TAG] One Piece - S11E69 [quality].mkv' ... renamed 'op/[TAG] One Piece - 430 [quality].mkv' -> 'op/[TAG] One Piece - S13E49 [quality].mkv' SKIP (op/[TAG] One Piece - 876 [quality].mkv): Can't find serial# '876' for One Piece renamed 'op/[TAG] One Piece - 655 [quality].mkv' -> 'op/[TAG] One Piece - S17E28 [quality].mkv' ... renamed 'op/[TAG] One Piece - 93 [quality].mkv' -> 'op/[TAG] One Piece - S07E02 [quality].mkv' renamed 'op/[TAG] One Piece - 278 [quality].mkv' -> 'op/[TAG] One Piece - S11E52 [quality].mkv' # OK, but what happens when we run it again? Will our files be further renamed? Will Luffy find One Piece? $ ./canon_vids op SKIP (op/[TAG] One Piece - 00 [quality].mkv): Invalid serial# '0' for One Piece SKIP (op/[TAG] One Piece - 875 [quality].mkv): Can't find serial# '875' for One Piece SKIP (op/[TAG] One Piece - 876 [quality].mkv): Can't find serial# '876' for One Piece # Of course! Those files were never found in the lookup table, so they're still # candidates for renaming. More importantly, no other files were touched. Little explanation: ./generate_series 8 22 17 13 9 22 39 13 52 31 99 56 100 35 62 49 118 33 96 > lookup/One\ Piece.lstExtra:If u want to automate create a line at crontab. canon_vids.txt generate_series.txt Edited February 15, 2019 by vinanrra
vinanrra 0 Posted February 15, 2019 Author Posted February 15, 2019 Very cool, thanks ! Just one question when will be supported custom scrappers or a scrapper for anime?
vinanrra 0 Posted February 16, 2019 Author Posted February 16, 2019 Have you explored the anime plugin? Not working for me with Absolute series for example: One Piece - 872.mkv Give me: Season 8 Chapter 72
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now