![]() |
|
SageTV Customizations This forums is for discussing and sharing user-created modifications for the SageTV application created by using the SageTV Studio or through the use of external plugins. Use this forum to discuss customizations for SageTV version 6 and earlier, or for the SageTV3 UI. |
![]() |
|
Thread Tools | Search this Thread | Display Modes |
#1
|
|||
|
|||
rename and move files to the import directory
I use unRaid as a NAS and run a torrent client on it. I used to manually rename and move the TV episodes but that got tiresome and I used the opportunity to learn some perl and regular expressions. I make no claim to be any good at either
![]() It is customized to my quirks and setup but maybe it can be useful to others. It should run fine on linux and windows, I used both to test it. If you find odd comments or variable names it's because I forgot to translate from french ![]() usage: Code:
perl tv_rename.pl /path/to/files/to/rename/* Code:
#!/usr/bin/perl #TV series file rename script, v0.9.1, 2011-01-22 #v0.9.1: added forced 2 digits in series and episode numbers, tweaked the handling of " - " for reruns #v0.9.2: use regular expression for "csi" substitution, series name optional in path #v0.9.3: deal with the 6x09 format, # added caps to series first letter of each word, # remove multiple spaces, # check if the dir exists, check if it's a caps issue then create a new one #v0.9.4: replace "_" with " " #v0.9.5: fancy up the ripper info remover a bit using a scalar and deal better with "-" in the ripper's signatures # same / in win and linux, who'd a thunk #v0.9.6: deal with episodes like "201". The episode number MUST be 2 digits for the script to work. #v0.9.7: reworked the seep grabber to limit the problems when a series name ends with numbers # # ToDo # get the parameters from the command line use feature ':5.10'; use strict; use warnings; #config section my $dest_path_tv= "/mnt/disk7/tv"; my $test_mode = 1; my $include_episode_title =1; my $add_series_in_path=1; my $old_name=""; # windows section, deal with * in the arguments which are not expanded in windows # and the "/" vs "\" problem if ($^O eq "MSWin32") { use File::DosGlob; @ARGV = map { my @g = File::DosGlob::glob($_) if /[*?]/; @g ? @g : $_; } @ARGV; #different path under windows $dest_path_tv= "//tower/disk7/tv"; } sub it_is_video($$$) { my $filename = shift; my $extension = shift; $old_name = shift; my $new_name; my $serie; my $seep; my $episode; #print "var <$1><$2><$3><$4><$5><$6><$7><$8><$9><$10>\n"; #remove the path $filename =~ s/(.*\/)//; #replace "_" with " " $filename =~ s/_/ /g; #extract series name, season, episode and episode name. #pattern: s01e01 s1e01 01x01 1x01 $filename =~ m/(.*?)( - )?(S|s)?(\d{1,2})(E|e|X|x)(\d{2})( - )?(.*)/; if (defined($4) and defined ($6)){ print"this is TV pattern 1\n"; $serie=lc($1); $seep= sprintf ('s%#.2ue%#.2u', $4, $6); $episode=$8; } else{ #pattern: 201 separated it, it had the hapit of eating numbers at the end of a series's name ex: V 2009 $filename =~ m/(.*?)( - )?(\d{1,2})(\d{2})( - )?(.*)/; if(defined($3) and defined ($4)){ print"this is TV pattern 2\n"; $serie=lc($1); $seep= sprintf ('s%#.2ue%#.2u', $3, $4); $episode=$6; } else { print "$old_name is not a TV episode\n"; return; } } #episode name cleanup #remove ripper's info my $CRAP = '(HDTV|-H|FEVER|xvid|INTERNAL|SYS|LOL|LOL|\[VTV\]|PROPER|FQM|2HD|notv|FQM|www|therealworld de|tcm[|]|\(|\)|{|})'; #remove "-" between tags but not in "real" episode name $episode =~ s/($CRAP-$CRAP)|$CRAP//gi; #remove leading and lasting "." and " " $episode =~ s/[\. ]*$//g; $episode =~ s/^[\. ]*//g; #remove multiple "." $episode =~ s/\.{2,}/./g; #replace "." by " " $episode =~ s/\./ /g; #remove multiple " " $episode =~ s/\ {2,}/ /g; #series name cleanup #remove leading and lasting "." and " " $serie =~ s/[\. ]*$//g; $serie =~ s/^[\. ]*//g; #remove multiple "." $serie =~ s/\.{2,}/./g; #replace "." by " " $serie =~ s/\./ /g; #remove multiple " " $serie =~ s/\ {2,}/ /g; #rename CSI for BMT data scraper $serie =~ s/^csi$/crime scene investigation/; #capitalize the first letters I wonder if this will help BMT... $serie =~ s/\b([a-z])(\w+)\b/\u$1$2/g; #keep NCIS all in caps because I'm an annoying bastard $serie =~ s/(Ncis)(.*)/\U$1\E$2/; #print "$serie\n"; if ($add_series_in_path==1) { $new_name="$dest_path_tv/$serie/"; my $dir="$dest_path_tv/$serie"; unless(-d $dir){ my $serielc=lc($serie); my $dirlc="$dest_path_tv/$serielc"; #if the directory exists in lower caps, use that one if(-d $dirlc) { $new_name="$dest_path_tv/$serielc/"; } #if not, create with caps else { if ($test_mode==0){ use File::Path; mkpath($dir,1) or print "unable to create $dir ($!)"; } else { print "test mode, will not ";} print "make dir *$dir* here ($!)\n"; } } } else{ $new_name="$dest_path_tv/"; } if ($episode ne "" and $include_episode_title==1) { $new_name="$new_name$serie - $seep - $episode.$extension"; } else{ $new_name="$new_name$serie - $seep.$extension"; } if ($old_name eq $new_name) { print "Name hasn't change, skipping $old_name\n"; } elsif ($test_mode==1) { print "test mode, file is not renamed\n$old_name\n$new_name\n\n"; } elsif (rename($old_name, $new_name)){ print "file moved:\n$old_name to\n$new_name\n\n"; } else { print "unable to rename $old_name to $new_name\nCheck that the destination folder exists and matches caps/now_caps"; } } foreach (@ARGV) { my $old_name = $_; die $@ if $@; my @video = ("avi", "mpg", "mpeg", "mp4"); my $working = $old_name; #remove the file type and save it $working =~ m/(.*\.)(.*$)/; $working = $1; my $extension = $2; #check if the extension matches the known video file type foreach (@video) { if ($_ eq lc($extension)){ it_is_video($working,$extension, $old_name); } } } exit(0); Code:
*/5 * * * * perl /boot/custom/tv_rename.pl /mnt/disk7/torrent/copy_to_tv/* edits: #v0.9.1: added forced 2 digits in series and episode numbers, tweaked the handling of " - " for reruns #v0.9.2: use regular expression for "csi" substitution, series name optional in path #v0.9.3: deal with the 6x09 format, # added caps to series first letter of each word, # remove multiple spaces, # check if the dir exists, check if it's a caps issue then create a new one #v0.9.4: replace "_" with " " #v0.9.5: fancy up the ripper info remover a bit using a scalar and deal better with "-" in the ripper's signatures # same / in win and linux, who'd a thunk #v0.9.6: deal with episodes like "201". The episode number MUST be 2 digits for the script to work. #v0.9.7: reworked the seep grabber to limit the problems when a series name ends with numbers Last edited by Gog; 02-03-2011 at 08:09 PM. |
![]() |
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Some wrong files in video import directory | rerooks | SageTV Software | 4 | 04-27-2009 12:16 PM |
Record Directory Nested in Import Directory | jsonnabend | SageTV Software | 2 | 08-04-2008 06:59 AM |
Any way to move from a recording directory with compressed files? | edbmdave | SageTV Software | 22 | 01-05-2008 05:24 PM |
Import files into SageTV recordings instead of video directory? | rbarr110 | SageTV Software | 11 | 02-10-2006 06:26 PM |
Is it possible to move a file to a specific directory | ldavis | SageTV Software | 0 | 09-20-2003 08:45 AM |