Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7751[/thread]

Konzept: Synchronisation einer Ordnerstruktur

Leser: 1


<< |< 1 2 >| >> 20 Einträge, 2 Seiten
StefanJ
 2006-03-02 10:17
#63386 #63386
User since
2005-05-03
35 Artikel
BenutzerIn
[default_avatar]
Guten Morgen euch allen,

ich bräuchte mal eure Hilfe, und hoffe dass euch der lange Text nicht zu sehr abschreckt!
Es geht um folgendes:
Ich möchte ein Perl-Skript entwickeln, welches in der Lage ist über irgendeine Art von einer Steuerungsdatei eine Ordnerstruktur über das Internet mit https zu synchronisieren. ( Die Zentrale gibt die Ordnerstruktur vor, die Zweigstellen sollen auf ihrem Server diese Ordnerstruktur dann übertragen bekommen).

Ich stelle mir das ganze so vor:
Der Server in der Zentrale mit seiner zu synchonisierenden Ordnerstruktur, erstellt ein "Abbild" dieser Struktur in einer Datei(nennen wir sie Sync-Datei) und stellt sie auf einem Webserver zu Verfügung. Das zu entwickelnde Perl-Skript in den Zweigstellen soll nun mit Hilfe eines Zusatztools(z.B. curl) nach erfolgreicher Authentifizierung am Webserver diese Datei lokal herunterladen. Aufgrund des erstmaligen Download der Sync-Datei, sollten nun innerhalb des Perl-Skripts alle gefundenen Dateien(die Ordner müssen dann lokal vom Skript erstellt werden,weil curl nur Dateien download kann) vom Webserver heruntergeladen werden, und entsprechend der Sync-Datei in die Ordner verteilt werden.

Wenn nun die Sync-Datei auf dem Zentrale-Server aktualisiert wurde, sollen die Zweigstellen die "neue" Sync-Datei herunterladen, und mit der lokal gespeicherten Sync-Datei verglichen werden--> Alle nicht mehr vorhandenen ORdner/Dateien werden gelöscht, alle neuen Ordner werden angelegt und alle neue Dateien heruntergeladen und in die entsprechenden Ordner verteilt...

Nun meine Fragen:
(1) wie würdet ihr das Ganze angehen und ist das so realierbar??
(2) Gibt es Alternativen für curl(mit der man eventuell ganze Ordner mit Dateieninhalt herunterladen kann. Vorraussetzung ist https als übertragunsprotokoll, und eine Authentifizierung muss ermöglicht werden können)
(3) Oder soll man das Ganze ganz anders angehen??
(4) bitte helft mir :-)

MFG,

StefanJ
renee
 2006-03-02 11:20
#63387 #63387
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du könntest Dir mal das CPAN:libwww-Paket anschauen. Damit kann man auch https-Verbindungen aufbauen (dazu braucht man aber noch openSSL).

Mit CPAN:File::Path kannst Du Verzeichnispfade anlegen und löschen.

Wenn FTP eine Option ist, kannst Du Dir ja mal CPAN:Net::SFTP benutzen.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
murphy
 2006-03-02 12:06
#63388 #63388
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Nicht dass man das nicht in Perl lösen könnte, aber was spricht gegen die Verwendung eines Versionskontrollsystemes? Subversion lässt sich zum Beispiel wunderbar in einen Webserver integrieren.
When C++ is your hammer, every problem looks like your thumb.
v8r8no
 2006-03-07 15:31
#63389 #63389
User since
2006-03-05
6 Artikel
BenutzerIn
[default_avatar]
alternative gibts sync tools wie rsync und unison die sich über sichere Verbindungen tunneln lassen, warum da in Perl selbst realisieren?
StefanJ
 2006-03-08 16:51
#63390 #63390
User since
2005-05-03
35 Artikel
BenutzerIn
[default_avatar]
sorry dass ich so spät antworte,
danke für eure Beiträge, aber ich musste es letztendlich nun doch wie gehabt angehen, weil bei allen Tools irgendwas dran war,wodurch es sich nicht realisieren ließ..z.B. unison geht nicht weil es über ssh geht und dafür entsprechende Ports geöffnet werden müssten...

Aber hätte da jetzt mal ne andere Frage noch:

Und zwar will ich eine Ordnerstruktur auslesen,ich benötige dabei insgesamt 3 Angaben:
1. Den kompletten Pfad
2. Ein "Flag" mit dem man erkennt dass es eine Datei oder ein Ordner ist
3.ein Zeitstempel (wann die Datei das letze mal angefasst wurde)

Optimal wäre wenn es dann so aussieht
c:\test\test,03/07/06 10:03:45,f (das hier ist eine Datei)
c:\test\test,03/07/06 10:03:45,d (das hier ein Ordner)
c:\test\test\muh.txt,03/07/06 10:03:45 ( wieder ein File..)

wenn das nicht geht, müsste ich dann halt 2 dateien erzeugen lassen, eine mit den dateien und eine mit den Ordnern...

Wie könnte ich das am besten machen ?!

Gruß,

Stefan
Dubu
 2006-03-08 20:37
#63391 #63391
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=StefanJ,08.03.2006, 15:51]Und zwar will ich eine Ordnerstruktur auslesen,
[/quote]
File::Find

Quote
ich benötige dabei insgesamt 3 Angaben:
1. Den kompletten Pfad

$File::Find::name

Quote
2. Ein "Flag" mit dem man erkennt dass es eine Datei oder ein Ordner ist

-f $pfadname
-d $pfadname

Quote
3.ein Zeitstempel (wann die Datei das letze mal angefasst wurde)

Angefasst oder modifiziert (atime vs. ctime vs. mtime)?
-M $pfadname
perldoc -f stat

Quote
Optimal wäre wenn es dann so aussieht
c:\test\test,03/07/06 10:03:45,f  (das hier ist eine Datei)
c:\test\test,03/07/06 10:03:45,d  (das hier ein Ordner)
c:\test\test\muh.txt,03/07/06 10:03:45 ( wieder ein File..)

Bist du sicher, dass keine Kommata in den Dateinamen auftauchen können?
Dubu
 2006-03-08 20:40
#63392 #63392
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ach ja, noch was:
[quote=StefanJ,08.03.2006, 15:51]
c:\test\test,03/07/06 10:03:45,f  (das hier ist eine Datei)
c:\test\test,03/07/06 10:03:45,d  (das hier ein Ordner)
c:\test\test\muh.txt,03/07/06 10:03:45 ( wieder ein File..)
[/quote]
Solche Zeitangaben sind zwar für menschliche Wesen praktisch zum Lesen, aber umständlich für Computer auszuwerten. Wenn du die Datei nur zur Synchronisation auf dem Client benötigst, nimm lieber UNIX-Timestamps. Damit lässt sich besser rechnen.
StefanJ
 2006-03-09 11:48
#63393 #63393
User since
2005-05-03
35 Artikel
BenutzerIn
[default_avatar]
nein die kommas sollen später noch durch ein anderes Trennzeichen ersetzt werden. Ähm, ja, also irgendwie krieg ich das ganze net so hin, trotz deiner Hilfestellung.(wo genau schreib ich das -f $Dateipfad hin ??) Könnte mir das jemand mal zeigen, wie das auszusehen hat? Mit dem von Dir beschriebenen Unix-Timestempel ? (mtime)
Vielen Dank im Voraus!
Das hab ich bis jetzt :



Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
use File::Find;

my $dir = "c:/test";

find(\&dir_all, $dir);

sub dir_all
{
push (@files, $File::Find::name);
}

print @files;
renee
 2006-03-09 12:06
#63394 #63394
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

use strict;
use warnings;
use File::Find;

my $dir = '/path/to/dir';
my @files;

find(\&wanted,$dir);

sub wanted{
my $file = $File::Find::name;
# vereinfachend gehe ich davon aus, dass es entweder eine Datei oder ein Ordner ist...
my $flag = -f $file ? 'f' : 'd';
my $time = -M $file;

push(@files,$file.'__'.$time.'__'.$flag);
}


ungetestet!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
StefanJ
 2006-03-09 12:56
#63395 #63395
User since
2005-05-03
35 Artikel
BenutzerIn
[default_avatar]
ah, super danke, funktioniert
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2006-03-02 10:17.