#!/usr/bin/perl use 5.14.0; use strict; use warnings; use File::Spec qw(splitdir); use Cwd qw(abs_path); use File::Basename qw(basename); if (!$ARGV[0]) { exit; } my $arg = abs_path($ARGV[0]); sub getdirs { my $dn = shift; my @dirs; open(FIND, '-|', qq(find -L "$dn" -name "*" -type d)) or die "Can't run 'find': $!"; push(@dirs, ()); chomp(@dirs); close(FIND) or die "Can't close 'find': $!"; return(@dirs); } sub getfiles { my $dn = shift; my @files; opendir(my $dh, $dn) or die "Can't open directory '$dn': $!"; foreach (sort(readdir $dh)) { my $fn = "$dn/$_"; if (/.mp3$/ && -f $fn) { push(@files, $fn); } } closedir $dh or die "Can't close directory '$dn': $!"; return @files; } foreach my $dn (getdirs($arg)) { my @dirs = File::Spec->splitdir( $dn ); my $el = scalar(@dirs); my @tags; my @write; foreach (1..2) { push(@tags, $dirs[--$el]); } my @files = getfiles($dn); foreach my $fn (@files) { my $temp = basename($fn); $temp =~ s/^1-0*//; $temp =~ s/.mp3$//; my @split = split('\. ', $temp); push(@tags, $split[0]); push(@tags, $split[1]); #@write = ( '--artist', "\"$tags[1]\"", '--album', "\"$tags[0]\"", '--song', "\"$split[1]\"", '--track', "\"$split[0]\"" ); @write = ( "--artist=\"$tags[1]\"", "--album=\"$tags[0]\"", "--song=\"$split[1]\"", "--track=\"$split[0]\"" ); system(qq{mid3v2 @write "$fn"}); if ($? != 0) { say "Something went wrong with 'mid3v2': $!"; exit; } } }