perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 23
Click for quality!




11.02.2012 / 06:54

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDateien nach Änderungsdatum aus einem Verzeichniss lesen...
Seitenanfang
Hallo Zusammen,

wie kann man Dateien mit bestimmten Datum (Änderungsdatum) aus einem Verzeichniss auslesen?

Das Datum und der Suchtext werden vordefiniert und an der Konsole eingegeben..Jetzt möchte ich das Verzeichniss öffnen in dem die Suche stattfindet, aber wie gebe ich meinem Skript noch eine Datum mit auf dem Weg, sodass die Suche nur nach einem bestimmten Änderungsdatum sucht. Oder nach einer Zeitspanne von 01.10.-31.10.2008. Die Datums Eingabe möchte ich am besten mit STDIN an der Konsole eingeben.

Könnte mir hier jemand weiterhelfen? Ich hoffe ihr versteht auch ws ich meine. ;)

LG perlseb

Datum: 27.01.2008-23:46

Beitragre: Dateien nach Änderungsdatum aus einem Verzeichniss lesen...
Seitenanfang
Sollte so funktionieren, muss aber noch verprobt werden:


#!/usr/bin/perl

use strict;
use Time::Local;

my( $from, $until, $search );

# einlesen und umwandeln "von-Datum"
do{
print "from (dd.mm.yyyy): ";
$from = <STDIN>;
chomp( $from );
}while( $from !~ /\d{2}\.\d{2}\.\d{4}/ );
$from = seconds_since_start_of_epoch( $from );

# einlesen und umwandeln "bis-Datum"
do{
print "until (dd.mm.yyyy): ";
$until = <STDIN>;
chomp( $until );
}while( $until !~ /\d{2}\.\d{2}\.\d{4}/ );
$until = seconds_since_start_of_epoch( $until );

# einlesen des Suchbegriffes
do{
print "Search: ";
$search = <STDIN>;
chomp( $search );
}while( $search eq "" );

# einlesen des Verzeichnisinhaltes
opendir(DIR,".");
my @content = readdir(DIR);
closedir(DIR);

foreach my $file ( @content ){

# alles ignorieren, was keine Datei ist
next if( ! -f $file );

# hole Datum der letzten Modifikation der Datei
(my $mtime = (stat($file))[9]) || die "$file: stat error";

localtime $mtime, "\n";

# oeffne Dateien zum lesen, die im vorgegebenen Zeitraum
# angelegt/veraendert wurden
if( $mtime >= $from && $mtime <= $until ){
if( ! open(IN,"<$file" ) ){
print "can't open $file\n";
} else {
print "scanning file $file\n";
# suche nach dem Suchbegriff, bis Suchbegriff gefunden
# oder EOF
while ( <IN> ){
if( $_ =~ /$search/i ){
print "found \"$search\" in file $file\n";
last;
}
}
}
}
}

#---------------------------------------------
# seconds_since_start_of_epoch($)
#
# berechnet die Sekunden des uebergebenen
# Datums seit Beginn der Epoche (01.01.1970)
# Uhrzeit ist fest auf 00:00:00 Uhr gesetzt.
#
# Das Grundkonstruckt der Funktion ist von
# Martin Fabiani (www.linux-services.org/perl)
#---------------------------------------------
sub seconds_since_start_of_epoch{

my $real_date = shift;
$real_date =~ /(\d{1,2})\.(\d{1,2})\.(\d{4})/;
my @date = (0,0,0,$1,$2,$3); # hh,mm,ss,dd,mm,yyyy

$date[4]--; # januar ist 0
$date[5] -= 1900; # Jahr 0 ist 1900

return timelocal(@date);
}

Datum: 31.01.2008-10:04

Beitragre: Dateien nach Änderungsdatum aus einem Verzeichniss lesen...
Seitenanfang
dank dir tommyb.

sobald ich wieder hier @work zeit für mein coden habe und nicht meiner üblichen arbeit nachgehen muss, versuche ich es mal, ich dank dir schonmal...

Datum: 31.01.2008-10:52

Beitragre: Dateien nach Änderungsdatum aus einem Verzeichniss lesen...
Seitenanfang

#!/usr/bin/perl

use strict;
use warnings;

use DirHandle;
use Date::Calc qw(Date_to_Time);

my $dir_path = '/tmp';

print "Start Datum (DD.MM.YYYY): ";
chomp(my $start_date = <STDIN>);
my(@start_date) = split(/\./, $start_date, 3);

print "End Datum (DD.MM.YYYY): ";
chomp(my $end_date = <STDIN>);
my(@end_date) = split(/\./, $end_date, 3);

my $start_time = Date_to_Time(reverse(@start_date), 0, 0, 0);
my $end_time = Date_to_Time(reverse(@end_date), 0, 0, 0);

if(my $dir = DirHandle->new($dir_path)) {
while(my $dir_item = $dir->read()) {
next if $dir_item =~ /^\.\.?$/;

my $mod_time = (stat("$dir_path/$dir_item"))[9];

if($mod_time > $start_time && $mod_time < $end_time) {
print "$dir_path/$dir_item\n";
}
}
$dir->close() or die $!;
}
else {
die "Error on opening directory $dir_path: $!\n";
}


Nicht groszartig auf logische Fehler getestet.

Datum: 31.01.2008-13:32

Beitragre: Dateien nach Änderungsdatum aus einem Verzeichniss lesen...
Seitenanfang
danke vielmals für den schnipsel code. hat funktioniert und ich konnte ihn einbauen. vielen dank. und bis zum nächsten mal.

Datum: 04.02.2008-09:53

-






-
-