hey I have written a Prgramm which reads mp3 tags and displays it, created a folder with the name of the artist and album.
Now I wanted to move the mp3 file in the new folder with the move command, but that does not work.
only if i use absolute values then the mp3 file is moving.
Perhaps someone can help me here.
I have the code in line
or die "Could not move '$ filename' to '$ cwd / $ targetdir /': $!";
as the error message it gives: Could not move '04 - Too Close.mp3 'to' G :/ perl / Alex Clare - The Lateness of the Hour / ': Permission denied at 62nd mkdir.pl line
I would also further modify the tags of the mp3 file, but I do not know what I should do there.
#!perl
use warnings;
use strict;
use MP3::Tag;
use File::Find;
use File::Copy;
use Cwd;
my $cwd = getcwd; # Arbeitsverzeichnis
+
my $mp3dir = $cwd; # Default
print "Pfad angeben wo die MP3's sind!!! [keine Eingabe - Aktuelles Ve
+rzeichnis]\n";
while (my $input = <STDIN>) {
last if $input !~ /\S/; # leere Eingabe
chomp($input);
if (-d $input) { # Verzeichnis existiert?
$mp3dir = $input;
last;
}
print "Verzeichnis '$input' existiert nicht. Nochmal versuchen.\n"
+;
}
find(\&wanted, $mp3dir); # Achtung: Rekursive Suche
sub wanted {
return unless /\.mp3$/i; # alles was keine *.mp3 Endung
+ hat wird
# nicht beachtet
my $filename = $_;
my $fullpath = $File::Find::name;
return if (-d $fullpath); # Verzeichnisse mit '.mp3' weg
+lassen
if ($mp3 = MP3::Tag->new($fullpath)) {
print "$_ (Tags: ", join(", ",$mp3->get_tags),")\n";
my ($title, $track, $artist, $album, $comment, $year, $genre)
= $mp3->autoinfo();
print "* Song: $title\n"
. "* Track: $track\n"
. "* Artist: $artist\n"
. "* Album: $album\n"
. "* Comment: $comment\n";
my $targetdir = make_dirname_from_tags($artist, $album);
if (! $targetdir) {
print "Fehler beim Erzeugen des Ordnernamens!\n";
return;
}
if (! -d $targetdir) { # existiert noch nicht?
if (! mkdir("$cwd/$targetdir")) {
warn "Kann Ordner '$cwd/$targetdir' nicht anlegen: $!"
+;
return;
}
}
move($fullpath, "$cwd/$targetdir/$filename");
or die "Could not move '$filename' zu '$cwd/$targetdir/':$!";
}
}
sub make_dirname_from_tags {
# Hier diejenigen Zeichen in den Tags ersetzen, die für Ordner-/Datein
+amen
# verboten sind.
my @tags = @_;
return if ! @tags;
for my $tag (@tags) {
$tag =~ s/[:,]/_/g; # Zeichenklasse noch anpassen
}
return(join ' - ', @tags);
}