#!/usr/local/bin/perl use strict; use utf8; use warnings; use Encode 'from_to'; use File::Spec::Functions; my $art = '/Volumes/Martinez/mp3/Artists/'; my $sym = '/Volumes/Martinez/mp3/ByLetter/'; unless (-d $sym) { mkdir $sym or die "$sym: $!"; } opendir my $dh, $art or die "$art: $!"; for my $dir (readdir $dh) { next if $dir =~ /^\./; my $cart = catdir($art, $dir); next unless -d $cart; $dir =~ /^(.)/; my $letter = uc $1; $letter = "?" unless $letter =~ /^[A-Z0-9]$/; $letter = "#" if $letter =~ /\d/; my $ldir = catdir($sym, $letter); unless (-d $ldir) { mkdir $ldir or warn "$ldir: $!"; } from_to($dir, "utf8", "ascii"); my $csym = catdir($ldir, $dir); # print "$cart -> $csym\n"; unless (-l $csym) { symlink $cart, $csym or warn "$cart: $csym: $!"; } } __END__