#!/usr/local/bin/perl -w #Author: Shraddha Kulkarni use strict; use File::Copy; print "Please enter the path of the directory: "; my $path = ; chomp $path; print "The pattern/word to be replaced: "; my $pattern = ; chomp $pattern; print "New word: "; my $replacement = ; chomp $replacement; my @updated_files; recursive_opendir("$path"); print "\n'find and replace' over.\n\n List of updated files -\n"; foreach(@updated_files){ print "\t$_\n"; } #### subroutines of the program follow sub recursive_opendir{ ## calls itself; a recursive function opendir (DH, "$_[0]") || die "Can't open directory $_[0]:$!"; my $cur_dir="$_[0]"; my @list = readdir DH; foreach (@list){ if(-l "$cur_dir/$_"){ print "skipping $cur_dir/$_"; next; } if(-d "$cur_dir/$_"){ next if($_ eq "." || $_ eq ".."); print "\n$_\/ is a directory. Entering $cur_dir/$_\/ now.\n"; recursive_opendir("$cur_dir/$_"); } if (-f "$cur_dir/$_"){ print $cur_dir."/".$_."\n"; replace($cur_dir."/".$_); } else{ print "some other file type\n"; } } close DH; } sub replace{ my $tmp_file = $_[0].".tmp"; my $cur_file = $_[0]; my $replacement_done = "false"; copy($cur_file,$tmp_file); open FWH, ">$tmp_file"; open FH,"$cur_file"; while(){ if(s#$pattern#$replacement#g && $replacement_done eq "false"){ $replacement_done = "true"; } print FWH $_; } close FH; close FWH; push (@updated_files, $cur_file) if($replacement_done eq "true"); move($tmp_file,$cur_file); }