Fixed various bugs in video copy and merge scripts
[videoscripts/.git] / remove_empty_tv_dirs
diff --git a/remove_empty_tv_dirs b/remove_empty_tv_dirs
new file mode 100755 (executable)
index 0000000..b9b7941
--- /dev/null
@@ -0,0 +1,79 @@
+#!/usr/bin/perl
+# Author: Alan J. Pippin
+# Description: Find and remove TV recording directories that don't contain any recordings in them
+
+use File::Copy;
+use File::Basename;
+use Getopt::Std;
+use File::stat;
+use Time::localtime;
+use File::Pid;
+use Data::Dumper;
+
+####################################################################################################
+# Configuration parameters
+my $tv_src_dir = "/tvpool/tv";
+my $log = "/var/log/organize/remove_empty_tv_dirs.log";
+my $tv_file_ext = "-iregex \".*\.mov\" -o -iregex \".*\.avi\" -o -iregex \".*\.mp4\" -o -iregex \".*\.mpg\" -o -iregex \".*\.ts\" -o -iregex \".*\.mkv\"";
+my $find_tv_show_dirs = "find \"$tv_src_dir/\" -maxdepth 1 -cmin +14400 -type d";
+my $find_tv_season_dirs = "find \"$tv_src_dir/\" -maxdepth 2 -mindepth 2 -cmin +14400 -type d";
+my $find_tv_shows = "find \"$tv_src_dir/\" -cmin +14400 $tv_file_ext";
+
+####################################################################################################
+# Find empty TV show directories to remove
+
+my %tv_show_dirs;
+
+# Find all of our TV season dirs and store them in a hash
+foreach $dir (`$find_tv_season_dirs`) {
+    chomp($dir);
+    my $season = basename($dir);
+    my $show = basename(dirname($dir));
+    #print "-> Found dir $dir show $show season $season\n";
+    $tv_show_dirs{$show}{$season}{has_recordings} = 0;
+}
+foreach $dir (`$find_tv_show_dirs`) {
+    chomp($dir);
+    my $show = basename($dir);
+    #print "-> Found dir $dir show $show\n";
+    $tv_show_dirs{$show}{has_recordings} = 0;
+}
+
+# Find all of our TV show recordings and store them in a hash
+foreach $file (`$find_tv_shows`) {
+    chomp($file);
+    my $recording = basename($file);
+    my $season = basename(dirname($file));
+    my $show = basename(dirname(dirname($file)));
+    #print "-> Found show $show season $season and recording $recording\n";
+    $tv_show_dirs{$show}{$season}{has_recordings} = 1;
+    $tv_show_dirs{$show}{has_recordings} = 1;
+}
+
+#print Dumper(\%tv_show_dirs);
+
+# For each season directory that doesn't have recordings, remove it
+foreach $show (keys %tv_show_dirs) {
+    foreach $season (keys %{$tv_show_dirs{$show}}) {
+       if($season eq "has_recordings") { next; }
+       if ($tv_show_dirs{$show}{$season}{has_recordings} == 0) {
+           print "-> Removing season dir '$show/$season'\n";
+           system("rm -rf \"$tv_src_dir/$show/$season/\"");
+       }
+    }
+}
+
+# For each show directory that doesn't have any recordings under it, remove it
+foreach $show (keys %tv_show_dirs) {
+    my $has_recordings = 0;
+    if($show eq ".grab") { next; }
+    foreach $season (keys %{$tv_show_dirs{$show}}) {
+       if ($tv_show_dirs{$show}{$season}{has_recordings} == 1) {
+           $has_recordings = 1;
+       }
+    }
+    if($has_recordings == 0) { 
+       print "-> Removing show dir '$show'\n";
+       system("rm -rf \"$tv_src_dir/$show/\"");
+    }
+}