Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 1st, 2012  |  syntax: None  |  size: 2.09 KB  |  hits: 17  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;
  5.  
  6. use DirHandle;
  7.  
  8. #binmode STDOUT, ":shift_jis";
  9.  
  10. my $dir=$ARGV[0] || '/cygdrive/f/shared/michiko/hippo/';
  11.  
  12. #
  13. sub main {
  14.     my ($dir) = @_;
  15.     my $dirh = DirHandle->new($dir);
  16.     if (defined $dirh) {
  17.         my $d;
  18.         while (defined($d = $dirh->read)) {
  19.             next if $d =~ /^\./ || $d =~ /\.db$/;
  20.             my ($year,$month,$day,$channel,$title,$suffix) = ($d =~ /^(\d{4})-(\d{2})-(\d{2})_\d{2}h\d{2}m_([^_]+)_([^_]+).*(\.\w+)$/);
  21.             if (defined $year && defined $title) {
  22.                 $title =~ s/^\s*//;
  23.                 $title =~ s/\s*$//;
  24.                 my $dst0 = substr($year,2).$month.$day."_$title$suffix";
  25.                 my $src = "$dir/$d";
  26.                 my $dst = "$dir/itunes/$dst0";
  27.                 my $done = "$dir/itunes_ok/$dst0";
  28.                 $done =~ s/\.\w+$/.touch/;
  29.                 if (!-e $done) {
  30.                     my $srcsz = -s $src;
  31.                     my $dstsz = -s $dst;
  32.                     if (!$dstsz || $srcsz != $dstsz) {
  33.                         copyFile($src,$dst,$done);
  34.                     }
  35.                     else {
  36.                         print "... checking md5\n";
  37.                         my $srcmd5 = (split /\s+/, `md5sum "$src"`)[0];
  38.                         my $dstmd5 = (split /\s+/, `md5sum "$dst"`)[0];
  39.                         if ($srcmd5 ne $dstmd5) {
  40.                             copyFile($src,$dst,$done);
  41.                         }
  42.                         else {
  43.                             `touch $done`;
  44.                             print "skipped $src\n";
  45.                         }
  46.                     }
  47.                 }
  48.                 else {
  49.                     print "skipped $src\n";
  50.                 }
  51.             }
  52.         }
  53.     }
  54. }
  55.  
  56. #
  57. sub copyFile {
  58.     my ($src,$dst,$done) = @_;
  59.     # not exist
  60.     print "copying $src ==> $dst\n";
  61.     `cp "$src" "$dst"`;
  62.     my $srcmd5 = (split /\s+/, `md5sum "$src"`)[0];
  63.     my $dstmd5 = (split /\s+/, `md5sum "$dst"`)[0];
  64.     if ($srcmd5 eq $dstmd5) {
  65.         `touch $done`;
  66.     }
  67.     else {
  68.         print "failed copy $src\n";
  69.     }
  70. }
  71.  
  72. main($dir);