1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/perl -w
use strict;
use MP3::Tag;
use File::Find;
print "Pfad angeben wo die MP3's sind!!!\n";
while (<STDIN>) {
chomp;
$_ = <*.mp3>;
find(\&wanted, $_);# findet alles was in dem angegebenen Verzeichnis ist
}
sub wanted {
my ($mp3, $track, $artist);
return unless /mp3$/i; # alles was keine *.mp3 Endung hat wird nicht beachtet
if ($mp3=MP3::Tag->new($_)) {
print "$_ (Tags: ", join(", ",$mp3->get_tags),")\n";
my @info=$mp3->autoinfo;
print "* Song: $info[0]\n";
print "* Track: $info[1]\n";
print "* Artist: $info[2]\n";
print "* Album: $info[3]\n";
print "* Comment: $info[4]\n";
my @path_opt= ("$track","$artist");
ordner();
}
print "\n";
}
sub ordner {
my $directory = "Ordner";
unless(-e $directory or mkdir $directory) {
die "Unable to create $directory\n";
}
}
1 2 3 4 5 6 7 8 9
... ordner("$track-artist"); # oder wie auch immer das verzeichnis aussehen soll ... } sub ordner { my ($dir) = @_; ... }
QuoteCode (perl): (dl )ordner("$track-artist");
1 2 3 4 5 6 7 8 9
use File::Copy qw/ move /; ... # in der sub wanted: my $dir = "/mp3dir/$artist/$track"; mkdir ($dir); # in $_ befindet sich der dateiname ohne pfad. # diese datei willst du verschieben nach /mp3dir/$artist/$track/ move($_, "$dir/$_");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/perl -w
use strict;
use MP3::Tag;
use File::Find;
use File::Copy;
print "Pfad angeben wo die MP3's sind!!!\n";
while (<STDIN>) {
chomp;
$_ = <*.mp3>;
find(\&wanted, $_);# findet alles was in dem angegebenen Verzeichnis ist
}
sub wanted {
my ($mp3, $track, $artist);
return unless /mp3$/i; # alles was keine *.mp3 Endung hat wird nicht beachtet
if ($mp3=MP3::Tag->new($_)) {
print "$_ (Tags: ", join(", ",$mp3->get_tags),")\n";
my @info=$mp3->autoinfo;
print "* Song: $info[0]\n";
print "* Track: $info[1]\n";
print "* Artist: $info[2]\n";
print "* Album: $info[3]\n";
print "* Comment: $info[4]\n";
ordner("$info[2] - $info[3]");#übergabe der tags zum ordner erstellen
}
print "\n";
}
sub ordner {
my ($directory) = @_;
unless(-e $directory or mkdir $directory) {
die print "Unable to create $directory\n";
}
}
1 2 3 4 5 6 7
# # my $dir = "/perl/$info[2] - $info[3]"; mkdir ($dir); move ($_, "$dir/$_"); # #
mkdir( $dir ) or die "mkdir( $dir) failed: $!\n";
2012-06-05T12:46:06 pqFile exists heisst: mkdir wurde nicht ausgeführt, weil das verzeichnis schon existiert. also erstmal ok.
1 2 3 4 5 6 7 8
# wenn $dir nicht existiert, lege es ohne oder sterbe im Fehlerfall... if ( ! -e $dir ) { mkdir( $dir ) or die "mkdir( $dir ) failed: $!\n"; } # $dir existiert, ist aber kein Verzeichnis elsif ( ! -d $dir ) { die "'$dir' exists but is not a directory!\n"; }
1 2 3 4 5 6 7
print "Pfad angeben wo die MP3's sind!!!\n"; while (<STDIN>) { chomp; $_ = <*.mp3>; find(\&wanted, $_);# findet alles was in dem angegebenen Verzeichnis ist }
1 2 3 4 5 6 7 8 9 10 11 12 13
# Findet das Aktuelle Verzeichnis my $cwd = getcwd; #aus der sub wanted my ($oldlocation,$newlocation); $oldlocation = "$cwd"; print "$oldlocation"; $newlocation = "$cwd/$info[2] - $info[3]/$_"; print "\n$newlocation\n"; move($oldlocation, $newlocation) or die "Could not move '$_' zu '$newlocation':$!";
QuoteCode (perl): (dl )1 2 3 4 5 6 7 8 9 10 11my $cwd = getcwd; my ($oldlocation,$newlocation); $oldlocation = "$cwd"; print "$oldlocation"; $newlocation = "$cwd/$info[2] - $info[3]/$_"; print "\n$newlocation\n"; move($oldlocation, $newlocation) or die "Could not move '$_' zu '$newlocation':$!";
Guest timehandlerich benutze windows.
der ordner wird ja erstellt und existiert vorher nicht, dafür werden ja aus der mp3 datei die tags verwendet, auf groß oder kleinschreibung habe ich da keinen einfluss.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
#!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 Verzeichnis]\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' weglassen 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"); } } sub make_dirname_from_tags { # Hier diejenigen Zeichen in den Tags ersetzen, die für Ordner-/Dateinamen # verboten sind. my @tags = @_; return if ! @tags; for my $tag (@tags) { $tag =~ s/[:,]/_/g; # Zeichenklasse noch anpassen } return(join ' - ', @tags); }
1 2
# verschiebe oder sterbe mit Fehlermeldung, wenn's nicht klappt move($fullpath, "$cwd/$targetdir/$filename") or die "move($fullpath, "$cwd/$targetdir/$filename"): $!\n";
1
2
3
use File::Copy;
move("/perl/01 Casper - XOXO.mp3","/perl/Casper - xoxo/01 Casper - XOXO.mp3");
Guest timehandleraber im hauptcode funktioniert es nicht