Thread Dateien in Verzeichnissen rekursiv bearbeiten? (7 answers)
Opened by SoWhy at 2008-01-24 11:37

SoWhy
 2008-01-24 11:37
#105084 #105084
User since
2008-01-24
3 Artikel
BenutzerIn
[default_avatar]
Hi zusammen,

ich muss in eine Reihe HTML Dateien einen bestimmten Code einfügen, die aber zu zahlreich und verteilt sind, um es manuell zu machen. Daher wollte ich einen Script schreiben, der durch alle Verzeichnisse geht und das für mich macht. Leider funktioniert es nur bedingt, er geht zwar durch den ersten Baum, aber nicht weiter. Ich hab z.B. im Verzeichnis "test" zwei Ordner, "test3" und "test4", die jeweils einen Unterordner "test2" haben. Das Script geht in test/test3/test2 und macht dort seine Arbeit, aber nicht mehr in test/test4...

Folgenden Code hab ich verwendet:
Code (perl): (dl )
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
#!/usr/bin/perl -s
use Cwd; # module for finding the current working directory

&ScanDirectory("N:/Scripts/test");

# This subroutine takes the name of a directory and recursively scans
# down the filesystem from that point looking for HTML files
sub ScanDirectory{
my ($workdir) = shift;

my ($startdir) = $workdir; # keep track of where we began

chdir($workdir) or die "Unable to enter dir $workdir:$!\n";
opendir(DIR, ".") or die "Unable to open $workdir:$!\n";
my @files = readdir(DIR) or die "Unable to read $workdir:$!\n";
closedir(DIR);

foreach my $file (@files){

if ((-d $file) and ($file ne ".") and ($file ne "..")) { # is this a directory?
&ScanDirectory(Cwd::realpath('.') . "/" . $file);
next;
}

if (($file =~ m/\.htm/) || ($file =~ m/\.php/)) {
$file2 = $file;
open (FILE, $file2);
local $/;
$content = <FILE>;
close FILE;

# Öffnet Template des einzufügenden Codes
open (CODE, "N:/Scripts/etrackercode.txt");
local $/;
$code = <CODE>;
close CODE;

@name = split(/\./, $file);

# Verzeichnisname
@path = split(/\//, Cwd::realpath('.'));

$code .= "blablabla"; # Fügt variable Informationen ein

# Prüft, ob Code bereits in der Datei vorhanden ist
if ($content =~ m/etracker PARAMETER 2.4/) {
print "etracker Code schon vorhanden: ".Cwd::realpath('.')."\/$file2\n";
}
# Sonst: Füge Code in HTML ein und speichere neues HTML
else {
$content =~ s/\<\/body\>/$code\<\/body\>/g;

open (TEST, ">$file2");
print TEST $content;
close TEST;
}


} # End IF

chdir($startdir) or
die "Unable to change to dir $startdir:$!\n";
}
}

Kann mir jemand helfen, wo der Fehler ist?
Die Ausgabe des Ganzen ist:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
etracker Code schon vorhanden: N:/Scripts/test/0198.htm
etracker Code schon vorhanden: N:/Scripts/test/0198.htm.bak
etracker Code schon vorhanden: N:/Scripts/test/0398.htm
etracker Code schon vorhanden: N:/Scripts/test/0498.htm
etracker Code schon vorhanden: N:/Scripts/test/test3/0198.htm
etracker Code schon vorhanden: N:/Scripts/test/test3/0198.htm.bak
etracker Code schon vorhanden: N:/Scripts/test/test3/0398.htm
etracker Code schon vorhanden: N:/Scripts/test/test3/04982.htm
etracker Code schon vorhanden: N:/Scripts/test/test3/test2/0198.htm
etracker Code schon vorhanden: N:/Scripts/test/test3/test2/0398.htm
etracker Code schon vorhanden: N:/Scripts/test/test3/test2/0498.htm


Schonmal vielen Dank im Voraus!

SoWhy

View full thread Dateien in Verzeichnissen rekursiv bearbeiten?