Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 21

Thema: Kleines Skript mir großer Wirkung

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719

    Kleines Skript mir großer Wirkung

    Wenn man unter Windows Winzip -rar oder -ace installiert, bekommt man in sein Kontextmenu für Archivdateien zwei neue Einträge:

    - Entpacke in dieses Verzeichnis
    - Entpacke in Unterverzeichnis (bei einem Archiv "zeugs.zip" kommt der Inhalt in einen neuen Uuterordner "zeugs")

    Es ist mir bisher nicht gelungen, diese Funktionalität mit Linux/KDE nachzubauen. Das liegt haupsächlich daran,
    das, wenn man einen neuen Eintrag in den Dateizuordnungen unter tar.gz anlegt, mit dem Kommando "tar -zxf", Konqueror
    tar -zxf nicht mit dem aktuellen Verzeichnis als Arbeitsverzeichnis, sondern mit dem Homedirectory als Workingdir startet.
    Dann landen die Daten im Homedirectory, oder das Quellarchiv wird nicht gefunden. Das zweite war, das ich natürlich nicht
    "tar", sondern "Entpacke tar-Archiv" in meinem Kontextmenü stehen haben wollte. Das wollte ich mit einer .desktop-Datei
    lösen, ging aber nicht, weil Konqueor versucht, die .desktop-Datei direkt auszuführen. Auch das Icon, das ich eingestellt hatte,
    wurde nicht angezeigt. Außerdem sollte im Kontextmenü von jeder Datei zwei Einträge stehen:

    - Zu Tar-Archiv hinzufügen (GZip)
    - Zu Tar-Archiv hinzufügen (BZip2)

    Das hat auch nicht funktioniert.

    Fazit:

    Warscheinlich brauchen wir zwei Skripte:

    addtoarchive -> Zerlegt den übergebenen, absoluten Dateinamen in Pfad und Dateinamen, und ruft tar auf, um das Archiv zu
    packen und im richtigen Verzeichnis abzulegen.

    extractarchive -> Zerlegt den übergebenen, absoluten Dateinamen in Pfad und Dateinamen, und ruft tar auf, um das Archiv zu
    entpacken und den Inhalt im richtigen Verzeichnis abzulegen.

    Vielleicht könnte man sogar mithilfe von KDialog eine Progressbar anzeigen. Leider scheint dieses Programm nicht in MDK 8.2
    Download-Edition enthalten zu sein, ich konnte es jedenfalls nicht finden.

    Vielleicht hat ja mal jemand Lust, sich diesem Problem anzunehmen.

  2. #2
    Registrierter Benutzer
    Registriert seit
    16.04.2002
    Beiträge
    20
    hai axel,

    ich habe zwar nicht die musse an gui's zu basteln,
    wenn es auch mit einem script geht,
    aber möglicherweise kann die das
    weiterhelfen.

    mit der tar option "-C <zielpfad>" kannst
    du tar sagen, wohin es entpacken soll.

    möglich ist auch ein:
    (cd ${ZIEL}; tar xzf ${PFAd}/<datei>)

    damit kann man zumindest schon mal einen
    teil automatisieren.

    gruss
    lankin

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Ja, nur woher nehme ich das Ziel? Das müßte man wohl aus dem absoluten Pfad der Eingabedatei auslesen.

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Der Pfad der Datei sollte doch durch den %f Parameter an dein Kommado erhältlich sein.

    Btw, es gibt ein Tutorial zu Servicemenüs unter KDE
    http://developer.kde.org/documentati...vicemenus.html

    Übrigens:
    "Hier entpacken..." ist schon ein Eintrg im Kontextmenü, ich nehme an von Ark.
    Schau mal im ServiceMenü .desktop file von ARK nach, wie das gemacht wurde.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    16.04.2002
    Beiträge
    20
    moin axel,

    wenn du einen absoluten-path hast,
    kannst du mit der tar-option: "-P"
    das prob erschlagen.

    ansonsten bei power-arc finde ich
    z.b. ganz witzig, das mehrere pfade zum
    entpacken vorgeschlagen werden.
    das könnte ich mir dann mit der "-C"
    vorstellen.

    z.b.
    Extract here: -C $(pwd)
    Extract to actual path: -C $(pwd)/i$(basename $0 .tgz}
    Extract to: read PFAD NAME
    -C ${PFAD}/${NAME}
    etw in der art.

    gruss
    lankin

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Re: Kleines Skript mir großer Wirkung

    Original geschrieben von axeljaeger
    Vielleicht könnte man sogar mithilfe von KDialog eine Progressbar anzeigen. Leider scheint dieses Programm nicht in MDK 8.2
    Download-Edition enthalten zu sein, ich konnte es jedenfalls nicht finden.
    kdialog war bisher ein Utility eines externen Entwicklers http://www.david-guembel.de/kdialog.html und wurde erst vor ein paar Wochen in den CVS importiert.
    Wird wahrscheinlich ab 3.1 in kdebase sein.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Das Skript ist das eine Problem, die Integration in KDE ist das andere:

    Konqueror sollte schon ein Icon für Entpacken in das Menü einbinden. Außerdem soll nicht der Name des Skriptes, sondern ein vernünftiger Text, wie z.B. "In neues Unterverzeichnis entpacken" im Menü stehen. Das muß auch irgendwie gehen, geht ja auch bei anderen Programmen.

    Leider bin ich unfähig, die ganzen Tipps, dir hier gegeben würden, in Skripte zu packen. Vielleicht kann ja mal jdm. der Bash etwas besser beherrscht, die entsprechenden Skripte hier posten. Ich wundere mich nur, warum sowas nicht per default in KDE enthalten ist. der Aufwand ist doch eher gering denke ich, und sowas ist ja ab WinME in Windows für Zip-Archive fest eingebaut. Wahrscheinlich wäre es sogar günstiger, sowas direkt in den Konqueor einzubauen, weil ein Skript nicht gerade die Geschwindigkeit hat. Bis KDialog hochgefahren hat, ist das Archiv wahrscheinlich schon gepackt. Gibt es denn eine Option, um tar zu sagen, das es Progressinformationen ausgeben soll?

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von axeljaeger
    Konqueror sollte schon ein Icon für Entpacken in das Menü einbinden. Außerdem soll nicht der Name des Skriptes, sondern ein vernünftiger Text, wie z.B. "In neues Unterverzeichnis entpacken" im Menü stehen. Das muß auch irgendwie gehen, geht ja auch bei anderen Programmen.
    Das wird alles in dem Tutorial beschrieben, dessen URL ich gepostet habe.


    Ich wundere mich nur, warum sowas nicht per default in KDE enthalten ist. der Aufwand ist doch eher gering denke ich, und sowas ist ja ab WinME in Windows für Zip-Archive fest eingebaut.
    Das "Hier extrahieren" ist ja bereits in ark's servicemenu enthalten.
    Die Datei heißt bei mir arkservicemenu.desktop und ist hier unter Debian in /usr/share/apps/konqueror/servicemenus


    Wahrscheinlich wäre es sogar günstiger, sowas direkt in den Konqueror einzubauen, weil ein Skript nicht gerade die Geschwindigkeit hat.
    Die Service Menüs sind ja eine Funktionalität von Konqueror (darum stehen sie auch in apps/konqueror)
    Die Service Menu Action macht dann das dafür vorgesehen Programm.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Das heist, ich muß mich nicht mehr damit beschäftigen, weil diese Funktionalität schon in KDE 3 enthalten ist? Sorry, ich hab noch KDE 2.2.2, da gibt's Servicemenüs glaube ich noch nicht.

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Doch, geht auch schon in KDE2
    Ich hab hier nämlich auch KDE2.2.2

    ich hab mal so zum testen folgendes gemacht:

    eine ServiceMenu .desktop Datei in
    .kde/share/apps/konqueror/servicemenus
    erstellt, mit folgendem Inhalt

    Code:
    [Desktop Entry]
    ServiceTypes=application/x-tgz,application/x-tarz
    Actions=ExtractDir
    
    [Desktop Action ExtractDir]
    Name=Extract in directory
    Exec=extractdir %f
    extractdir ist ein kleines script, dass ich in ein Verzeichnis aus $PATH kopiert habe (/usr/local/bin)

    Es hat diesen Inhalt

    Code:
    #!/bin/bash
    WORKDIR=$(dirname $1)
    FILENAME=$(basename $1)
    DIRNAME=$FILENAME.dir
    cd $WORKDIR && mkdir $DIRNAME
    cd $DIRNAME && tar xvzf $1
    Wenn ich auf ein tgz rechtsklicke, erscheint mein "Extract in directory" Eintrag und wenn ich den wähle erzeugt er ein Verzeichnis mit dem Namen der Datei + .dir und extrahiert das Archiv dahinhein.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #11
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    Das sieht ganz brauchbar aus... ;-)

    Dateien entpacken
    Aber ich muss schon sagen unter Fenster ist dieses noch etwas anwenderfreundlicher:

    Extract to DerDateiname
    D. h. er zeigt das Verzeichnisnamen an, geht das irgendwie? Unter Fenster wird das glaub' ich mit einer geladenen .dll des Packpogramms gemacht, was für eine Verschwendung, ist ja fast so schlimm wie "hello world" in perl mit use strict/warnings & diagnostics zu kompilieren. (Es braucht auf meinem Athlon XP 1333 12 Sekunden zu kompilieren und ist 1,7 MB gross)
    Geändert von fork (09-08-2002 um 01:01 Uhr)

  12. #12
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    Hier nochwas zum Packen:
    /opt/kde2/share/apps/konqueror/servicetypes/packer.desktop
    Code:
    [Desktop Entry]
    ServiceTypes=allfiles
    Actions=Pack
    
    [Desktop Action Pack]
    Name=Packen...
    Exec=xterm -e /usr/local/bin/pack %U
    und das script /usr/local/bin/pack(ich weiss 5 Zeilen Shell hättens auch irgendwie getan):
    Code:
    zu 2)
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use diagnostics;
    
    use File::Basename;
    use Tk;
    
    my $all_files;
    my $execute    = 0;
    my $ArchivName = "NeuesArchiv.tgz";
    my $force      = 0;
    my $error;
    
    $all_files .= "$_ " for (@ARGV);
    
    my $window = Tk::MainWindow->new( -title => "Dateien Packen" );
    my $frame1 = $window
    		->Frame
    		->pack();
    my $label  = $frame1
    		->Label(	-text => "Archivname:" )
    		->pack( 	-side => "left" );
    my $entry  = $frame1
    		->Entry( 	-textvariable => \$ArchivName )
    		->pack();
    my $frame2 = $window
    		->Frame
    		->pack( 	-pady => 5 );
    my $ok     = $frame2
    		->Button( 	-text => "OK", 		-command => \&check )
      		->pack( 	-side => "left" );
    my $cancel = $frame2
    		->Button( 	-text => "Abbrechen", 	-command => sub { exit } )
    		->pack();
    my $status = $window
    		->Label()
    		->pack();
    MainLoop;
    
    sub check {
        if ( -f $ArchivName && $force < 1 ) {
            $status	->configure( 	-text 		=> "Datei schon vorhanden!", 
    				-foreground 	=> "darkred");
            $ok	->configure( 	-text 		=> "Trotzdem!" );
            $force++;
        }
        else {
            $error = 0;
            if (
                system( "tar -cvzf " . dirname( $ARGV[0] ) . "/$ArchivName $all_files")
              )
            {
                $status	->configure(	-text       	=> "Fehler: $!",
                     			-foreground 	=> "darkred");
                $ok		->configure( 	-text     	=> "Na und!" );
                $cancel	->configure( 	-text 		=> "ich hör lieber auf..." );
            }
            else {
                $status	->configure( 	-text       	=> "Alles OK",
                    			-foreground 	=> "darkgreen");
                $cancel	->configure( 	-text 		=> "Beenden" );
                $ok		->configure( 	-text     	=> "Nochmal ;-)" );
            }
        }
    }
    Geändert von fork (09-08-2002 um 14:55 Uhr)

  13. #13
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Wird das auch mit KDE 2.2.2 funktionieren?

  14. #14
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    @fork
    Cooles Script, werde ich ausprobieren, sobald ich zuhause bin.
    Allerdings sollte man den Parameter vielleicht besser auf %F ändern, %U ist eine Listen von URLs.
    Kann dein Script URLs handhaben?

    @axeljaeger
    forks servicemenu befindert sich laut seiner Nachricht in /opt/kde2

    Außerdem macht ja das Perlscript die ganze Arbeit und Perl dürfte unabhängig von der jeweiligen KDE Version sein

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  15. #15
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    Code:
    tobias@ax301:~> rpm -q kdebase
    kdebase-2.2.1-33
    tobias@ax301:~>
    > Kann dein Script URLs handhaben?
    Wuesste nicht das tar damit umgehen kann, aber beim testen scheint das kein Unterschied zu Dateinamen zu machen. Hab's reingeschrieben weil's in der Ark Vorlage auch drin war.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •