czwartek, 27 maja 2010

Rekursywne przeglądanie wszystkich plików

Na potrzeby dostosowana adresów URL do innej konfiguracji innego serwera wykorzystałem następujący skrypt:


#!/usr/bin/perl -w
use strict;
undef $/; ## na potrzeby czytania każdego pliku (process_file)

sub recurse($) {
my($path) = @_;

## append a trailing / if it's not there
$path .= '/' if($path !~ /\/$/);
## print the directory being searched
print STDERR $path,"\n";

## loop through the files contained in the directory
for my $eachFile (glob($path.'*')) {

## if the file is a directory
if( -d $eachFile) {
## pass the directory to the routine ( recursion )
recurse($eachFile);
} else {

## przetwarzaj plik
process_file ($eachFile);
}
}
}

sub process_file {
my $file = shift;
## Tylko pliki .html i .php
if ($file =~ /\.html|\.php$/) {
my $tmp_file = "$file.temp";
rename($file, $tmp_file);

open (F, $tmp_file); open (FO, ">$file");
my $ff = <F>;

## zamień bezwględne URLe na lepsze
$ff =~ s/href=(["'])http:\/\/gnu.univ.gda.pl\/~tomasz/href=$1/g; ## zamień
$ff =~ s/src=(["'])http:\/\/gnu.univ.gda.pl\/~tomasz/src=$1/g; ## zamień

print STDERR "-> $file\n";
print FO $ff;
close(F);
close (FO);
}
}

## initial call ... $ARGV[0] is the first command line argument
recurse($ARGV[0]);

Wymieniając procedurę process_file można oczywiście ww. skrypt zaadaptować do innych zadań, np. poprawienia zepsutej daty modyfikacji plików:-)

Brak komentarzy:

Prześlij komentarz