• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> 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$_`;
}
}