hi,
da mein k3b gelegentlich trotz korrekter joliet-einstellungen beim brennen von mp3 mit nicht brennfreundlichen namen abschmiert und ich demnächst auf arbeit auch wieder perl programmieren muss, dachte ich mir meine verstaubten perl-kenntnisse wieder aufzufrischen in dem ich mir ein script schreibe das rekursiv alle verzeichnisse durchgeht und audio-dateien einen brennfreundlichen, im sinne von keine sonderzeichen und keine überlänge, dateinamen vergibt.
leider gibt mir mein erster versuch einen fehler mit dem ich nicht wirklich weiter komme.
das script:
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/perl
use strict;
use warnings;
#####################################################################
#
#
# script which scans recursively all folders based on #
# the current directory and renames audio file-names #
# to a burn-friendly format
#
#
#
#####################################################################
# constants &nb
sp; #
use constant MAX_FILENAME_LENGTH => 31;
# main script
#
print "start renaming files....\n";
scanDir();
print "finished renaming files....\n";
# functions &nb
sp; #
sub scanDir {
# open current directory
opendir(CURDIR, ".") or die "could not open directory! \n";
# iterate over directory entries
while(my $dirEntry = <CURDIR>) {
# skip "." and ".."
if($dirEntry eq "." || $dirEntry eq "..") {
next;
}
# if we encounter a audio-file
if(-f $dirEntry && $dirEntry =~ m/(.*mp3$)|(.*ogg$)/) {
renFile($dirEntry);
}
# if we encounter a directory, descend into it and start recursion
elsif(-d $dirEntry) {
chdir($dirEntry) or die "could not open directory $dirEntry! \n";
scanDir();
}
}
return 0;
}
sub renFile {
my $newFileName = my $oldFileName = shift;
# delete all special chars
$newFileName =~ s/[^a-zA-Z0-9_\,-]//;
# shorten file name if necessary and rebuild filename
$newFileName = substr($newFileName, 0, MAX_FILENAME_LENGTH) . substr($oldFileName, -4)
if(length($newFileName) > MAX_FILENAME_LENGTH);
rename ($oldFileName, $newFileName) or die "could not rename file $oldFileName !\n";
return 0;
}
führe ich das in der shell aus krieg ich:
./rectFileNames.pl
start renaming files....
readline() on unopened filehandle CURDIR at ./rectFileNames.pl line 37.
(Are you trying to call readline() on dirhandle CURDIR?)
finished renaming files....
kann mit dieser fehlermeldung jemand was anfangen?
hab ich hier irgendwas offensichtliches übersehen?
hoffe ihr könnt mir helfen!
ps: ich weiss das es für sowas genügend module gibt die rekursiv verzeichnisse durchgehen, würde es aber halt interessehalber gerne selber machen
pps: hmmpf, war ja klar das mir forum wieder meine formatierung zerhaut.......\n\n
<!--EDIT|supersucker|1139512449-->