#!/usr/bin/perl use strict; use warnings; use File::Find::Rule; use File::Spec; die "Usage: $0 path/to/search\n" unless ( @ARGV == 1 and -d $ARGV[0] ); my @dirs = File::Find::Rule->directory()->in( $ARGV[0] ) or die "Can't find anything in $ARGV[0]\n"; for my $dir ( @dirs ) { my @mp3s = File::Find::Rule->maxdepth(1)->file()->name("*.[Mm][Pp]3")->in($dir); if ( @mp3s ) { ( my $m3u = ( File::Spec->splitdir( $dir ))[-1] ) =~ s/[\s.']+//g; if ( open( M3U, ">", "$dir/$m3u.m3u" )) { print M3U "$_\n" for ( @mp3s ); close M3U; warn sprintf( "%d mp3s listed in %s\n", scalar @mp3s, "$dir/$m3u.m3u" ); } else { warn "Unable to create $dir/$m3u.m3u : $!\n"; } } }