#!/usr/bin/env perl use v5.18; use Data::Dumper; opendir my $dh, '.'; my @files = readdir $dh; closedir $dh; for my $file (@files){ my %bag; next unless $file =~ m/\.mp3$/i; my $id3out = `id3 "$file"`; for (split "\n", $id3out){ if(m/Track\: (\d+)/){ $bag{'track'} = $1; $bag{'track'} =~ s/^(\d)$/0\1/; }; if(m/Title\: (.+)/){$bag{'title'} = $1; $bag{'title'} =~ s/\s*$//; $bag{'title'} =~ tr/ /_/; $bag{'title'} =~ tr/(/-/; $bag{'title'} =~ tr/)//; $bag{'title'} =~ s/\//_a.k.a._/g; }; } next unless defined $bag{'track'} && defined $bag{'title'}; my $newfile = sprintf "%s-%s.mp3", $bag{'track'}, $bag{'title'} ; printf "mv \"%s\" \"%s\"\n", $file, $newfile; }