Dateienamen suchen & umbenennen - glob scheitert bei Space

Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

From: Mark Seuffert (Pirates) (captain_at_pirate.de)
Date: 26. Nov 2000


Hallo,

ich möchte eine Reihe von Dateien umbenennen, was eignet sich denn für
diese Aufgabe besonders?

Ich habe ein Perl-Script geschrieben, eines das Dateienamen globt,
einzelnd per RE den Namen verändert und umbenennt. Dummerweise
scheitert glob bei Filenamen die Space beinhalten, ich habe mal einen
"quick&dirty" Workaround eingebaut.... Ideen oder Verbesserungen?

#!/usr/bin/perl
#mp3norm.pl - Normalize MP3 file names V0.1, Moak Nov 2000\n
#Change files from "[band]song_name.mp3" into "band - song name.mp3"

@files = (`*.mp3`,'*.MP3');
$debug = 1;

if ($#ARGV>=0) {
  print "mp3norm - Normalize MP3 file names in current directory V0.1, Moak Nov 2000\n";
  exit 1;
}

print "Normalize MP3 file names...\n";
$count = 0;
foreach $file (@files) { #get all MP3 files in current directory
  @ls = glob($file);
                                        #however, glob fails on filenames with space inside
  undef @ls; #here is a (linux) workaround, TODO: better solution
  @lstemp = `ls -al`;
  foreach $line (@lstemp) {
    chop $line;
    $line =~ s/^(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+(.*)/$9/g;
    push @ls, $line;
  }

  foreach $filename (@ls) { #here we go
    print "file $filename\n" if($debug>1);
    if($filename =~ /^\[(.*?)\](.*?).mp3/i) {
      $newfilename = "$1 - $2.mp3"; #create new file name
      $newfilename =~ s/_/ /g;
      rename ($filename, $newfilename) || die ("Can't rename $filename: $!\n") if(!$debug);
      print "rename $filename -> $newfilename\n" if($debug);
      $count++;
    }
  }
} #work is done
print "Changed $count file(s)".($debug?" DEBUG ONLY - nothing changed":"")."\n";

-- 
Mark "Moak" Seuffert, Pirates Technologies, http://www.pirate.de


Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET