#!/usr/bin/perl -w # 2001.03.22 altblue ## use strict; defined $ARGV[0] or die "usage error: $0 [directory]$/"; use vars qw( $artist $album $year %TRACKS %FILES ); my $filemask = 'mp3'; my $index = $ARGV[0]; my $directory = defined $ARGV[1] ? $ARGV[1] : '.'; &parseIndex; #&printIndex; &getFiles; #&printFiles; &renameFiles; sub renameFiles { foreach(sort keys %FILES) { if( defined $TRACKS{$_} ) { print "$directory/$FILES{$_} -> $directory/$_.$TRACKS{$_}.mp3" or warn "error: $!"; rename "$directory/$FILES{$_}", "$directory/$_.$TRACKS{$_}.mp3" or warn "\terror: $!"; print $/; } } } #### ã º â î þ sub getFiles { opendir DIR, $directory or die "cannot open directory $directory : $!$/"; foreach ( readdir(DIR) ) { # m/^(\d\d).+?\.(?:$filemask)\s*$/i and $FILES{$1} = $_ ; m/^track\s*(\d\d).*?\.(?:$filemask)\s*$/i and $FILES{$1} = $_ ; # m/^unknown-(\d\d)_\w+\.(?:$filemask)\s*$/i and $FILES{$1} = $_ ; # m/^(\d\d)\.?.*?\.(?:$filemask)\s*$/i and $FILES{$1} = $_ ; } closedir DIR; } sub printFiles { print "Files:\n"; map { print "\t$_ :\t$FILES{$_}\n" } sort keys %FILES; } sub parseIndex { open IN, $index or die "cannot open file $index : $!$/"; no strict 'refs'; while () { if(/^(artist|album|year):\s+(.*?)\n$/i) { $$1 = normalize($2); } elsif (/^(\d\d)\.(.*?)(\s{2,}|$)/) { $TRACKS{$1} = normalize($2); } } close IN; } sub printIndex { print qq!artist:\t'$artist'\nalbum:\t'$album'\nyear:\t'$year'\ntracks:\n!; map { print "\t$_.$TRACKS{$_}\n" } sort keys %TRACKS; } sub normalize { local $_ = shift; tr/[ãâîþºÃÂÎÞª]/[aaitsAAITS]/; s/[\\\/:*?"<>|]//g; tr/A-Z/a-z/; $_; }