Harald Gabler: ZIP starten

Hallo!

Ich würde gerne einige Dateien auf meinem virtuellen Server mit dem Programm ZIP packen. Der Aufruf von ZIP soll über ein Perl-Script erfolgen. Kann mir bitte jemand verraten wie der Aufruf eines Programmes mit Parametern funktioniert? Alleine komme ich leider nicht weiter.

Vielen Dank
Harald

  1. Hallo!

    Ich würde gerne einige Dateien auf meinem virtuellen Server mit dem Programm ZIP packen. Der Aufruf von ZIP soll über ein Perl-Script erfolgen. Kann mir bitte jemand verraten wie der Aufruf eines Programmes mit Parametern funktioniert? Alleine komme ich leider nicht weiter.

    Vielen Dank
    Harald

    Hallo,

    in PERL version 5.005_02 built for MSWin32-x86-object
    gibt es das Modul "tar".... tar ist zip sehr ähnlich und mit WinCommander bzw. Winzip gleichermassen zu handhaben.

    Ich hab mit dem TAR Modul zwar auch noch nichts gemacht, aber vielleicht ist das was für Dich. Die Dokumentation zum TARmodul ist gut beschrieben:

    http://www.activestate.com/activeperl/docs/ bzw. im Startmenu, falls Du og. PERL inst. hast.

    Viele Grüße, Rolf

    PS: aus der Doku...

    use Archive::Tar;

    $tar = Archive::Tar->new();
      $tar->read("origin.tar.gz",1);
      $tar->add_files("file/foo.c", "file/bar.c");
      $tar->add_data("file/baz.c","This is the file contents");
      $tar->write("files.tar");

    1. hi!

      gibt es das Modul "tar".... tar ist zip sehr ähnlich und mit WinCommander bzw. Winzip
      gleichermassen zu handhaben.

      TAR hat mit ZIP überhaupt nichts zu tun und auch nur sehr wenig gemeinsam. TAR ist ein Archivprogramm, das einfach mehrere Dateien aneinander hängt. ZIP ist ein Komprimierungsprogramm, das Dateien - wie der Name sagt - komprimiert.

      bye, Frank!

      1. TAR hat mit ZIP überhaupt nichts zu tun und auch nur sehr wenig gemeinsam. TAR ist ein Archivprogramm, das einfach mehrere Dateien aneinander hängt. ZIP ist ein Komprimierungsprogramm, das Dateien - wie der Name sagt - komprimiert.

        bye, Frank!

        Grüß Dich Frank,

        Du hast Recht: TAR hängt einfach Dateien aneinander - stimmt! Jetzt wo ich das f* TAR-Modul mal getestet hab sehe ich das auch... ABER: mit dem tarModul kannst Du festlegen, ob eine Komprimierung erfolgen soll oder nicht und - Du kannst so erzeugte Dateien (egal ob die nu *.zip oder *.tar heissen) mit Winzip oder WinCommander öffnen.

        Dat geiht! Guck moi:

        ---listing TestScript zu TAR--->

        Teste das TAR-Modul!

        Dateiliste als Array:

        @lle = ("pip.pl", "ein.pl", "search.pl", "base.csv", "cgi-lib.pl");

        Komprimieren?

        $compr = 1;

        use Archive::Tar;
        $tar = Archive::Tar->new();
        $tar->add_files(@lle);
        $tar->write('file.zip',$compr) ;
        $tar->write('file.tar') ;

        Ergebnis: Archive "file.zip" bzw. "file.tar"

        "file.zip" ist wesentlich kleiner als "file.tar"

        "file.zip" enthält "file.tar"

        <---Ende Test---<

        Coole Mucke das TAR-Modul oder was meinst Du ;-)

        Viele Grüße, Rolf

  2. Hallo!

    Ich würde gerne einige Dateien auf meinem virtuellen Server mit dem Programm ZIP packen. Der Aufruf von ZIP soll über ein Perl-Script erfolgen. Kann mir bitte jemand verraten wie der Aufruf eines Programmes mit Parametern funktioniert? Alleine komme ich leider nicht weiter.

    Vielen Dank
    Harald

    Hallo Harald, zwei kleine Ergänzungen hätt ich da noch zu meinem Posting von heute Mittag...

    1. Vorschlag - Das Problem mit einer BatchDatei lösen, sieht so aus:

    ---listing sh.bat--->

    @echo off
    REM Shell Befehle ausführen
    REM Schreibe in die nächste(n) Zeile(n) Dein(e) Shell-Befehl(e) mit oder ohne Parameter(n)

    REM Die folgenden Zeilen Melden den Vollzug an den Browser!
    echo Content-type:text/html
    echo.
    echo.
    echo Shell-Befehl ausgeführt!!!
    <---sh.bat im cgi-bin/verzeichnis ablegen---<

    2. Vorschlag - Pipes in PERL
    geht so:

    ---ShellAufruf aus PERL-->

    open (PIP, " 'ShellKommando -parameter'");
    close (PIP);
    print "content-type:text/html\n\n";
    print "Shell-Befehl ausgeführt!!!";
    <---pip.pl im cgi-bin/verzeichnis ablegen---<

    Beides habe ich grad unter NT getestet, geht. Als ShellKommando kannst Du praktisch so Dein ZIP-Proggi mit oder ohne Parameter aufrufen.

    Viele Grüße, Rolf

    PS: Das TAR-Modul in PERL5 werd ich jetzt auch noch testen.... interessiert mich nunmehr persönlich.
    Fakt ist eines: TAR-Dateien können mit WinZip oder mit WinCommander unter NT einwandfrei bearbeitet werden. Aber das sagte ich ja schon ;-)

    1. Hallo Rolf!

      Danke für Deine Bemuehungen. Das Ganze soll auf einem Linux-Server laufen. Ich habe jetzt Variante 2 ausprobiert. Hier das angepasste Script:

      ------------------------------
      #!/usr/bin/perl

      open (PIP, " '/usr/bin/zip /usr/www/htdocs/netcamera/forum/forum.zip /usr/www/htdocs/netcamera/forum/forum.htm'");
      close (PIP);
      print "content-type:text/html\n\n";
      print "Shell-Befehl ausgeführt!";
      ------------------------------

      Es wird zwar "Shell-Befehl ausgeführt!" angezeigt, aber leider kein Archiv angelegt. Hast Du vielleicht eine Ahnung warum?

      Auf die Server-Installation habe ich keinen Einfluss. Deshalb weiss ich auch nicht, ob das gesprochene Modul installiert ist.

      Viele Gruesse
      Harald

      1. Hallo Harald, vielen Dank für Dein Feedback also:

        ---schnipp-->

        open (PIP, " '/usr/bin/zip /usr/www/htdocs/netcamera/forum/forum.zip /usr/www/htdocs/netcamera/forum/forum.htm'");
        <---schnapp---<

        in die Zeile
        open (PIP, " 'ShellKommando'");
        muss die Befehlszeile='ShellKommando' rein. Wenn '/usr/bin/zip /usr/www/htdocs/netcamera/forum/forum.zip /usr/www/htdocs/netcamera/forum/forum.htm' die Befehlszeile ist, gib die mal ohne die einfachen  Hochkommas ein.

        Noch ein Beispiel zu PIPE unter NT:
        open (CITRONE, " copy /b c:\druck.prn LPT1"):
        close (CITRONE);

        Also: unter NT wie auch unter LINUX gilt:
        -den HANDLER (CITRONE, PIP) kannst Du nennen wie Du möchtest
        -Das ShellKommando muss hinter dem PIPEsymbol " " notiert werden.

        Bitte teste das noch einmal, ansonsten bis morgen ja?

        Viele Grüße, Rolf

        1. Hallo Rolf!

          muss die Befehlszeile='ShellKommando' rein. Wenn '/usr/bin/zip /usr/www/htdocs/netcamera/forum/forum.zip /usr/www/htdocs/netcamera/forum/forum.htm' die Befehlszeile ist, gib die mal ohne die einfachen  Hochkommas ein.

          Nach Entfernung der einfachen Hochkommas funktionierte das Script, allerdings nur wenn ich es per Telnet starte. Ich kann es mir zwar nicht vorstellen, aber vielleicht stimmt etwas mit den Pfaden nicht. Morgen werde ich mal meinem Provider mailen. Dank Deiner Hilfe kann ich ja jetzt was vorweisen und eine konkrete Frage stellen.

          Danke und viele Gruesse
          Harald

          1. Hallo Harald,

            danke für Dein Feedback - hört sich doch schon ganz gut an...

            Also einen Gedanken hätt ich da noch zum Thema: Wenn Du da nur einen Shell-Befehl (oder auch mehrere) auf dem Server ausführen möchtest und nicht unbedingt eine "Vollzugsmeldung" im Browser brauchst, dann lass das Ganze doch gleich als "ShellScript" ablaufen - so wie mit der Batch vorgeschlagen.

            Unter UNIX/LINUX könnte ein solches Script so aussehen:

            ---"scriptfile"--->

            #!/bin/welche/shell/auch/immer/also/pfad/zum/shell/interpreter
            Kommando1 -parameter
            Kommando2 -parameter1 -parameter2
            <---"scriptfile" im /cgi-bin Verzeichnis ablegen und ausführbar machen---<

            Is halt noch so ein Gedanke...

            Viele Grüße, Rolf

            1. Hallo Rolf,

              es funktioniert schon, und ich habe den Code bereits in die Forumsadministration eingebunden. Nachdem ich darueber geschlafen hatte, war die Loesung ganz einfach. Wenn man ein Zipfile anlegen will, sollte man auch die Zugriffsrechte dementsprechend aendern. Manchmal bin ich wirklich blind ;-)

              Nochmals herzlichen Dank für Deine kompetente Hilfe.

              Viele Gruesse
              Harald