1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Perl: Lokalen Ordner mit Webverzeichnis abgleichen

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von hubionmac, 10.09.06.

  1. hubionmac

    hubionmac Rheinischer Krummstiel

    Dabei seit:
    25.06.04
    Beiträge:
    379
    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?
     
  2. hubionmac

    hubionmac Rheinischer Krummstiel

    Dabei seit:
    25.06.04
    Beiträge:
    379
    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$_`;
    }
    }
    
    
     

Diese Seite empfehlen