foreach my $folder (@folders) { next if $folder =~ /^\.\.?/; my $fqname = catdir( $output, $folder ); if ( -d $fqname ) { if ( ( glob("$fqname/*.cue") ) ) { print "$fqname: cue found\n"; } else { print "$fqname: cue found\n"; my ($cue) = <$fqname/*.cue>; my ($mp3) = <$fqname/*.mp3>; &process( $cue, $mp3, $fqname ); remove qw(*.cue *.m3u *nfo *.sfv); &renameFolder($folder); #### use warnings; use strict; use File::Remove qw(remove); use File::Spec::Functions; my $input = '/mnt/music/input/'; my $output = '/mnt/music/output/'; opendir DIR, $input or die "cannot open DIR: $!\n"; my @rars = grep /\.rar$/i, readdir(DIR); closedir(DIR); chdir($output) or die "error chmod to /output: $!"; foreach my $rar (@rars) { &extract($rar); } opendir( OUTPUT, $output ) or die "error open OUTPUT\n"; my @folders = readdir(OUTPUT) or die "error read folders\n"; closedir(OUTPUT); foreach my $folder (@folders) { next if $folder =~ /^\.\.?/; my $fqname = catdir( $output, $folder ); if ( -d $fqname ) { # assuming i have 2 folders with each one hosting a cue file # only the first cue file will be found if ( ( glob("$fqname/*.cue") ) ) { print "$fqname: cue found\n"; } else { print "$fqname: cue found\n"; my ($cue) = <$fqname/*.cue>; my ($mp3) = <$fqname/*.mp3>; &process( $cue, $mp3, $fqname ); remove qw(*.cue *.m3u *nfo *.sfv); &renameFolder($folder); } } } sub extract { my $file = shift; my @args = ( "unp", "$input$file" ); system(@args) == 0 or die "cannot extract: $!\n"; } sub process { my $cue = shift; my $mp3 = shift; my $folder = shift; my @args = ( "mp3splt", "-c", "$cue", "$mp3", "-o", '@n_@a_@b_@t' ); system(@args) == 0 or die "system @args failed: $?"; remove $mp3; chdir $output; } sub renameFolder { my $folder_before = shift; for ( my $folder_after = $folder_before ) { s/_-_/_/; s/-PsyCZ//; s/-UPE//; s/-mAhA//; s/-/_/; rename( $folder_before, $folder_after ); } }