Thread Dateien in Verzeichnissen rekursiv bearbeiten?
(7 answers)
Opened by SoWhy at 2008-01-24 11:37
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 etracker Code schon vorhanden: N:/Scripts/test/0198.htm Schonmal vielen Dank im Voraus! SoWhy |