Podcast Synch Batch File: Difference between revisions
From Mike Beane's Blog
mNo edit summary |
m (→Perl Script) |
||
Line 25: | Line 25: | ||
use File::Copy; | use File::Copy; | ||
my $podcastsource=" | my $podcastsource="C:/Documents and Settings/Mike/My Documents/My Music/Podcasts"; | ||
my $podcastdest="J:/MUSIC/Podcasts"; | my $podcastdest="J:/MUSIC/Podcasts"; | ||
my $dircontents=(); | my $dircontents=(); | ||
my $destdir=(); | my $destdir=(); | ||
print "Checking files to move over.\n"; | print "Checking files to move over.\n"; | ||
&move($podcastsource); #Check what is in the source and not in the dest - copy to dest | &move($podcastsource); #Check what is in the source and not in the dest - copy to dest | ||
print "Checking files to remove from On The Go.plp\n"; | |||
&OnTheGo; | |||
print "Checking files to remove.\n"; | print "Checking files to remove.\n"; | ||
&smash($podcastdest); #Check what is in the dest and not in the source - del from dest | &smash($podcastdest); #Check what is in the dest and not in the source - del from dest | ||
sub OnTheGo | |||
{ | |||
$LOGFILE_IN="J:/PLAYLISTS/On The Go.plp"; | |||
open LOGFILE_IN, $LOGFILE_IN or die "Cannot open $LOGFILE_IN for read :$!"; | |||
#binmode LOGFILE_IN; | |||
while (<LOGFILE_IN>) | |||
{ | |||
my $tmp=$_; | |||
$tmp =~ s/\0//g; | |||
$tmp =~ s/\015//g; | |||
$tmp =~ s/\012//g; | |||
#$tmp =~ s/ //; | |||
$tmp =~ s/HARP, /J:\//; | |||
$tmp =~ s/\\/\//g; | |||
if ($tmp =~ /J:/) | |||
{ | |||
#print "$tmp"; | |||
if ($tmp =~ m/($podcastdest)\/(.+)/) | |||
{ | |||
my $file=$2; | |||
#print "..$podcastsource/$file..\n\n"; | |||
if(-e "$podcastsource/$file") | |||
{ | |||
$file="$podcastsource/$file"; | |||
unlink ($file) or warn "Cannot del $file: $!";; | |||
print "$file\n"; | |||
} | |||
} | |||
} | |||
} | |||
#close | |||
#del | |||
} | |||
sub makedest | sub makedest | ||
Line 114: | Line 154: | ||
} | } | ||
} | } | ||
Revision as of 11:03, 7 June 2007
Not finding a good way to manage my podcasts on my Sansa e250 and I'm already manually dumping files from iTunes anyway (my choice).
For the meantime, here is synch.bat to del all files in the Podcasts directory on the Sansa and then xcopy everything in the iTunes Podcasts directory. It's not quick, but it works.
echo off cls del "g:\music\podcasts\*" /S /Q xcopy "D:\music\Ipod\Podcasts\*.mp3" /S "g:\music\Podcasts\"
Next step I plan to write something that checks:
Does file exist in both places - don't copyDoes file exist in dest and not in source - del destDoes file exist in source and not in dest - copy source- Do I have enough room to copy source -> dest - copy oldest files first
Implement create directory if not exist routine- Cleanup the code
- Make dest drive setting value
Perl Script
use File::Copy; my $podcastsource="C:/Documents and Settings/Mike/My Documents/My Music/Podcasts"; my $podcastdest="J:/MUSIC/Podcasts"; my $dircontents=(); my $destdir=(); print "Checking files to move over.\n"; &move($podcastsource); #Check what is in the source and not in the dest - copy to dest print "Checking files to remove from On The Go.plp\n"; &OnTheGo; print "Checking files to remove.\n"; &smash($podcastdest); #Check what is in the dest and not in the source - del from dest sub OnTheGo { $LOGFILE_IN="J:/PLAYLISTS/On The Go.plp"; open LOGFILE_IN, $LOGFILE_IN or die "Cannot open $LOGFILE_IN for read :$!"; #binmode LOGFILE_IN; while (<LOGFILE_IN>) { my $tmp=$_; $tmp =~ s/\0//g; $tmp =~ s/\015//g; $tmp =~ s/\012//g; #$tmp =~ s/ //; $tmp =~ s/HARP, /J:\//; $tmp =~ s/\\/\//g; if ($tmp =~ /J:/) { #print "$tmp"; if ($tmp =~ m/($podcastdest)\/(.+)/) { my $file=$2; #print "..$podcastsource/$file..\n\n"; if(-e "$podcastsource/$file") { $file="$podcastsource/$file"; unlink ($file) or warn "Cannot del $file: $!";; print "$file\n"; } } } } #close #del } sub makedest { my $destdirectory=$destdir; @directory2make = split(/\//, $destdirectory); shift (@directory2make); #drop the first $directorytmp=""; $directory1tmp=""; foreach $directory2make (@directory2make) { $directory1tmp="$directory1tmp\/$directory2make"; $directorytmp="j:$directory1tmp"; #print "$directorytmp\n"; if(!-e $directorytmp) { print "Did not find $directorytmp\n"; mkdir ("$directorytmp") or die "Cannot make $directorytmp :$!"; #incoming logs go here print "Created $directorytmp\n"; } } # end for each } sub move { my $dir = shift; opendir DIR, $dir or return; my @contents = map "$dir/$_", sort grep !/^\.\.?$/, readdir DIR; closedir DIR; foreach (@contents) { next unless !-l && -d; &move($_); $dircontents=$_; #print "$_\n"; &createcontents($dircontents); rmdir $_; } } sub createcontents { opendir(DIR, "$dircontents") or die "Cannot open $dircontents to read: $!"; @newfiles = grep(/\.mp3$/,readdir(DIR)); closedir(DIR); #print "$dircontents\n"; foreach $newfile (@newfiles) { if ($dircontents =~ m/($podcastsource)\/(.+)/) { $destdir="$podcastdest/$2"; my $testdir="$destdir/$newfile"; if(!-e $testdir) { if(!-e $destdir) #check to see if dest exists, if not, create the dir { &makedest($destdir); } my $filetobecopied = "$podcastsource/$2/$newfile"; my $oldfile = "$podcastdest/$2/$newfile"; print "Copying $newfile\n"; copy($filetobecopied, $oldfile) or die "File cannot be copied."; } } } } sub smash { my $dir = shift; opendir DIR, $dir or return; my @contents = map "$dir/$_", sort grep !/^\.\.?$/, readdir DIR; closedir DIR; foreach (@contents) { next unless !-l && -d; &smash($_); $dircontents=$_; #print "$_\n"; &destroycontents($dircontents); rmdir $_; } } sub destroycontents { opendir(DIR, "$dircontents") or die "Cannot open $dircontents to read: $!"; @files = grep(/\.mp3$/,readdir(DIR)); closedir(DIR); #print "$dircontents\n"; foreach $file (@files) { if ($dircontents =~ m/($podcastdest)\/(.+)/) { if(!-e "$podcastsource/$2/$file") { my $del="$podcastdest/$2/$file"; unlink ($del); print "$del\n"; } } } }