SageTV Community  

Go Back   SageTV Community > SageTV Development and Customizations > SageTV Customizations
Forum Rules FAQs Community Downloads Today's Posts Search

Notices

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.

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 01-22-2011, 01:15 PM
Gog Gog is offline
Sage Advanced User
 
Join Date: Oct 2004
Location: Montreal, Canada
Posts: 97
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/*
tv_rename.pl:
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);
I added this in my crontab so that it runs every 5 minutes. The output is emailed to me so that I can double-check where the files are sent.
Code:
*/5 * * * * perl /boot/custom/tv_rename.pl /mnt/disk7/torrent/copy_to_tv/*
Gog


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.
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
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


All times are GMT -6. The time now is 01:44 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2023, vBulletin Solutions Inc.
Copyright 2003-2005 SageTV, LLC. All rights reserved.