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



#!/COMMUNITY

Members: 5310
davon online: 1
weitere User: 21
Click for quality!




10.09.2010 / 05:22

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


Beitragrekursives kopieren und Datum Löschroutine
Seitenanfang
Hallo zusammen!

Bin noch totaler Anfänger mit Perl.
Ich muss ein perl Skript schreiben, welches einen bestimmten Ordner von einem Rechner(win) auf eine $ Freigabe(linux) kopiert.
auf der $Freigabe soll der Ordner der erstellt wird wie das aktuelle Datum heißen.
Außerdem soll eine Löschroutine vorhanden sein, die irgendwie guckt wie alt die vorhandenen Ordner sind.
Es sollen immer nur 5 backups auf der Freigabe vorhanden sein! kommt ein 6ter dazu, soll der erste gelöscht werden.

könntet ihr mir helfen???
Danke euch!!!

Gruß Kostas

Datum: 23.11.2005-21:51

Beitragre: rekursives kopieren und Datum Löschroutine
Seitenanfang
Hi,
der Code ist teilweise ungetestet, sollte Dich aber auf den richtigen Weg führen:

#!/usr/bin/perl -w

use strict;
use File::Copy::Recursive qw(rcopy); # from CPAN or with ppm

# 1) Freigabe auf Laufwerksbuchstabe mappen, bitte anpassen, evt. auch mit userid und passwort, ungetestet!
my $share = '\\server\share';
my $lwb = 'x:';
my $orig = 'c:\temp'; # oder was auch immer;
my $get_share = system("net use $lwb $share");
if ($get_share) { # Rueckgabewert von Windows Commands ist 0, wenn Erfolg, sonst groesser als 0
die "Konnte $share nicht auf $lwb mappen\n";
}

# 2) Heutiges Datum ermitteln, mal etwas ausfuehlicher und unperliger ;-)
my @date = localtime(); # ergibt 20051124 fuer heute
$date[3] = sprintf('%02d', $date[3]); # Tag, mit Nullen auffuellen
$date[4] = sprintf('%02d', $date[4]+1); # Monat, gehen bei Perl von 0-11, deshalb +1
$date[5] = sprintf('%02d', $date[5]+1900); # Jahr, ist jeweils -1900, deshalb korrigieren
my $today = join('', @date[5,4,3]);

# 2a) Datum von vor 5 Tagen ermitteln (fr das Lschen), diesmal perliger
@date = localtime(time()-432000); # das sind 5 Tage in Sekunden
my $olddate = sprintf('%02d%02d%02d', $date[5]+1900, $date[4]+1, $date[3]);

# 3) Verzeichnis anlegen
mkdir("$share\\$today") or die "Konnte Verzeichnis $share\\$today nicht anlegen: " . $!;

# 4) Kopieren
rcopy($orig,"$share\\$today") or die "Kopieren gescheitert: " . $!;
# man kann das auch mit xcopy oder so machen, dann braucht man kein Modul

# 5) Loeschen (davon ausgehend, dass Du es von der Windows Seite aus machst)
my $is_deleted = system("del /S $share\\$olddate");
if ($mis_deleted) {
die "Loeschen ging schief.\n";
}


Gruss,
svenXY

Datum: 24.11.2005-10:20

Beitragre: rekursives kopieren und Datum Löschroutine
Seitenanfang
arrrrrrrrg!
Fehler! Hatte $share und $lwb noch geändert, jetzt hängt's unten...
So ist es korrekt:

#!/usr/bin/perl -w

use strict;
use File::Copy::Recursive qw(rcopy); # from CPAN or with ppm

# 1) Freigabe auf Laufwerksbuchstabe mappen, bitte anpassen, evt. auch mit userid und passwort, ungetestet!
my $share = '\\server\share';
my $lwb = 'x:';
my $orig = 'c:\temp'; # oder was auch immer;
my $get_share = system("net use $lwb $share");
if ($get_share) { # Rueckgabewert von Windows Commands ist 0, wenn Erfolg, sonst groesser als 0
die "Konnte $share nicht auf $lwb mappen\n";
}

# 2) Heutiges Datum ermitteln, mal etwas ausfuehlicher und unperliger ;-)
my @date = localtime(); # ergibt 20051124 fuer heute
$date[3] = sprintf('%02d', $date[3]); # Tag, mit Nullen auffuellen
$date[4] = sprintf('%02d', $date[4]+1); # Monat, gehen bei Perl von 0-11, deshalb +1
$date[5] = sprintf('%02d', $date[5]+1900); # Jahr, ist jeweils -1900, deshalb korrigieren
my $today = join('', @date[5,4,3]);

# 2a) Datum von vor 5 Tagen ermitteln (fr das Lschen), diesmal perliger
@date = localtime(time()-432000); # das sind 5 Tage in Sekunden
my $olddate = sprintf('%02d%02d%02d', $date[5]+1900, $date[4]+1, $date[3]);

# 3) Verzeichnis anlegen
mkdir("$lwb\\$today") or die "Konnte Verzeichnis $lwb\\$today nicht anlegen: " . $!;

# 4) Kopieren
rcopy($orig,"$lwb\\$today") or die "Kopieren gescheitert: " . $!;
# man kann das auch mit xcopy oder so machen, dann braucht man kein Modul

# 5) Loeschen (davon ausgehend, dass Du es von der Windows Seite aus machst)
my $is_deleted = system("del /S $lwb\\$olddate");
if ($mis_deleted) {
die "Loeschen ging schief.\n";
}


SvenXY

Datum: 24.11.2005-10:23

-






-
-