• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Es regnet, ist neblig und kalt, alle sind krank und der Chef wird zunehmend cholerisch. Das Thema des Monats ist also folgerichtig --> Das Grau(en)
    Wir sind gespannt, war Euch dazu einfällt! Zum Wettbewerb --> Klick

Perl: Lokalen Ordner mit Webverzeichnis abgleichen

hubionmac

Tydemans Early Worcester
Registriert
25.06.04
Beiträge
393
Hallo, ich habe hier eine recht simple Aufgabe in Perl... nur Perl??? ich kann gerade mal eine einfache If-Abfrage programmieren, also vielleicht kann mir jemand helfen.

Ich brauche ein Script das folgendes tut:

- eine url aufrufen mit der aktuellen Dateiliste (www.test.de/latest.html)
(diese Liste enthält die md5 Prüfsummen der Dateien)
die Dateien sind nach Ihrer md5 Prüfsumme+einen String nach Wahl benannt
(z.B.f6daf6e1c46a9e9e901569273a926e51_blafasel.jpg)

- aus der Prüfsummenliste eine Liste mit Dateinamen basteln, die mit den Dateinamen in einem lokalen Verzeichnis verglichen werden.

- und dann durch löschen und herunterladen das lokale Verzeichnis auf den Stand des Webverzeichnisses bringen (www.test.de/images/)
(Das Webverzeichnis enthält die in latest.html bezeichneten Dateien)

Ich denke mit AppleScript kein großes Problem (für mich) mit Perl aber schon....
Hat einer vielleicht eine Idee?
 

hubionmac

Tydemans Early Worcester
Registriert
25.06.04
Beiträge
393
Tja, wenn mir niemand hilft, dann helfe ich halt mir und anderen ;-P

Es war am Ende gar nicht sooo schwer ein bischen Perl Code zu schreiben, hier also die paar Zeilen, die ein Verzeichnis Lokal anlegen und diese auf dem Stand eines anderen Verzeichnisses im Web halten... wohl gemerkt das Verzeichnis im Web heißt im Beispiel 1065c2888276b5ae4a91af3e333b36aa und dessen inhalt wird ein Verzeichnis drüber über eine index.php seite aufgelistet.

Also eine quasi Updatefunktion mit perl =)

Gruß Hubi
PHP seite (index.php
Code:
<?php
$handle=opendir ('./1065c2888276b5ae4a91af3e333b36aa');
while (false !== ($file = readdir ($handle))) {
    if ($file != ".") {
        if ($file != "..") {
        echo "$file\n";
        }
    }
}
closedir($handle); 
?>

und das Perls Script =)
Code:
#!/usr/bin/perl -w
######################################################################
$baseURL = "http://myurl.com/downloads/";
$listURL = $baseURL . "index.php";
$keyURL = $baseURL . "1065c2888276b5ae4a91af3e333b36aa/";
$destinationpath ="~/Pictures/SyncOrdner/";
`mkdir -p $destinationpath`;

######################################################################
## die Liste Laden
@remote_files = `curl -f $listURL`;
@local_files =`ls $destinationpath`;


$i = 0;
## die lokal loeschen, die nicht mehr online sind
foreach (@local_files) {
    chomp;
    $a=$_;
    $ll = 1;
    foreach (@remote_files) {
        chomp;
        $b=$_;
        if ($a eq $b) {
            $ll = 0;
        }
    } 
    if ($ll == 1) {
        `rm $destinationpath$a`;
    }
    ## den i zaehler fuer den Fall, dass die Liste leer ist
    $i+=1;
}

## So und jetzt soll er natuerlich nur die Dateien laden, die er noch nicht hat @dl_list
if ($i != 0){
$k=0;
foreach (@remote_files) {
    $k++;
        chomp;
    $a=$_;
        $ll = 1;
        foreach (@local_files) {
                chomp;
        $b=$_;
                if ($a eq $b) {
                        $ll = 0;
                }
        }
        if ($ll == 1) {
        `curl $keyURL$_ -o $destinationpath$a`;
        $k+=1;
        }
}
}

## fuer den fall das das Verzeichnis auf dem Rechner leer sein sollte
if ($k==0) {
foreach (@remote_files) {
    chomp;
    `curl $keyURL$_ -o $destinationpath$_`;
}
}