Index: /trunk/applymeta
===================================================================
--- /trunk/applymeta	(revision 19)
+++ /trunk/applymeta	(revision 20)
@@ -8,9 +8,8 @@
 
 GetOptions(
-    'file|f=s' => \my $META_FILE,
-    'clear'    => \my $CLEAR,
+    'file|f=s'   => \my $META_FILE,
+    'clear'      => \my $CLEAR,
+    'tracks|t=s' => \my $TRACKS,
 );
-
-my @AUDIO_FILES = @ARGV;
 
 my $meta;
@@ -27,6 +26,22 @@
 my $metadata = $meta->splitToTree;
 
-for my $i (1 .. @AUDIO_FILES) {
-    my $mp3 = MP3::Tag->new($AUDIO_FILES[$i - 1]);
+my $track_count = scalar grep { /^TRACK/ } keys %{ $metadata };
+
+my @track_numbers;
+foreach (split /,/, $TRACKS) {
+    if (/^(\d+)$/) {
+        push @track_numbers, $1;
+    } elsif (/^(\d+)-(\d+)$/) {
+        push @track_numbers, ($1 .. $2);
+    } elsif (/^-(\d+)$/) {
+        push @track_numbers, (1 .. $1);
+    } elsif (/^(\d+)-$/) {
+        push @track_numbers, ($1 .. $track_count);
+    }
+}
+
+for my $i (@track_numbers) {
+    my $audio_file = shift or die "No more audio files to process\n";
+    my $mp3 = MP3::Tag->new($audio_file);
 
     # first clear the tags if asked
@@ -47,5 +62,5 @@
     $mp3->select_id3v2_frame_by_descr('TPE2', $metadata->{ALBUMARTIST}) if $metadata->{ALBUMARTIST};
     $mp3->update_tags;
-    printf "    Apply to %s\n", $AUDIO_FILES[$i - 1];
+    printf "    Apply to %s\n", $audio_file;
 
     #TODO: full version of a make-string-filename-safe function
