Leser: 1
10 Einträge, 1 Seite |
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;
}
1
2
3
4
5
./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....
opendir(CURDIR, ".") or die "could not open directory! \n";
opendir(my $curdir, '.') or die "could not open directory: $!\n";
QuoteWarum verwendest Du eigentlich nicht CPAN: File::Find
Quoteps: ich weiss das es für sowas genügend module gibt die rekursiv verzeichnisse durchgehen, würde es aber halt interessehalber gerne selber machen
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
sub scanDir {
print "scandir() aufgerufen! \n";
# open current directory
local *CURDIR;
opendir(CURDIR, ".") or die "could not open directory $! \n";
# iterate over directory entries
while(my $dirEntry = <CURDIR>) {
# skip "." and ".."
if($dirEntry eq "." || $dirEntry eq "..") {
print "skipping . and ..! \n";
next;
}
# if we encounter a audio-file
if(-f $dirEntry && $dirEntry =~ m/(.*mp3$)|(.*ogg$)/) {
print "renaming file! \n";
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";
print "descend into next directory! \n";
scanDir();
}
}
close(CURDIR);
return 0;
}
Quote./rectFileNames.pl
start renaming files....
scandir() aufgerufen!
readline() on unopened filehandle CURDIR at ./rectFileNames.pl line 40.
(Are you trying to call readline() on dirhandle CURDIR?)
finished renaming files....
opendir(my $curdir, '.') or die "could not open directory: $!\n";
1 2 3 4 5 6 7 8
opendir(DIR, '.') or die $!; my @dir = readdir(DIR); closedir DIR; foreach(@dir) { ... }
Quotensonsten wäre es noch von vorteil, wenn du evlt mal die Zeile 40 markierst, damit wir sehen können wo der fehler flegt.
while(my $dirEntry = <CURDIR>)
Quote./rectFileNames.pl
start renaming files....
scandir() aufgerufen!
readline() on unopened filehandle CURDIR at ./rectFileNames.pl line 40.
(Are you trying to call readline() on dirhandle CURDIR?)
finished renaming files....
opendir(my $curdir, '.') or die "could not open directory: $!\n";
<CURDIR>
readline(*CURDIR)
<CURDIR>
readdir(*CURDIR)
opendir(my $curdir, '.')
perl -le 'opendir my $d, "."; print ref $d'
readdir($curdir)
chdir('..')
while(my $dirEntry = readdir(CURDIR)) {
QuoteGenau da liegt auch das Problem, denn ein Verzeichnishandle kann nicht mit readline ausgelesen werden. Du musst stattdessen, wie es vayu in seinem Beispiel schreibt, readdir verwenden, also einfach
QuoteMir ist schließlich noch eine Kleinigkeit aufgefallen: Da du mittels chdir in Unterverzeichnisse wechselst, solltest Du irgendwo auch mittels
Code
chdir('..')
wieder zurückwechseln ;)
10 Einträge, 1 Seite |