perl script, das Dateien aus einer Liste löscht

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von ACID25, 10.01.2013.

  1. ACID25

    ACID25 Grünschnabel

    Dabei seit:
    23.08.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo

    ich habe hier ein perl script, dass aus einer vorher generierten Liste, die so aus sieht

    31edb809ff19486daf60e66cc3ab1a7d
    6cc31f7dda514266b04dcace352100d6
    a658e00effac40e094793e9aae378c60

    die entsprechenden Dateien löschen soll. Aber irgendwie geht das nicht wirklich.

    Code:
    #!/usr/bin/perl -w
    require 5.004;
    
    my $fname1 = shift;
    my $server = shift;             #db-server.intern
    my $database = shift;         #VDB1
    my $sonaps = shift;            #ServerA ServerB
    
    my $outfname1 = "../CMS_VOS_cleanup_".$sony.".sh";
    my $outfname2 = "../CMS_VOS_cleanup_proxies_".$sony.".sh";
    my $text = '';
    
    # open file
    open(FILE, $fname1) || die("Could not open $fname\n");
    @lines_file = <FILE>;
    close(FILE);
    
    foreach $line (@lines_file) {
            $line =~ s/,.*//g;
            $line =~ s/\n//g;
            if (length($line)>0) {
                    $text .= "wget \"http:\/\/".$server."\/tamino\/".$database."\/cms?_delete=/CompleteDocument[\@ino:id=\"".$line."\"]\" -O /dev/null\n"
            }
    }
    
    # write result set file
    open(FILE, ">$outfname1") || die("Could not open $fname\n");
    print FILE $text;
    close(FILE);
    
    
    # open file
    open(FILE, $fname1) || die("Could not open $fname\n");
    @lines_file = <FILE>;
    close(FILE);
    
    $text = '';
    foreach $line (@lines_file) {
            $line =~ s/.*,//g;
            $line =~ s/\n//g;
            if (length($line)>0) {
                    $text .= "rm /Video/Proxies/*/".$line."*\n";
            }
    }
    
    # write result set file
    open(FILE, ">$outfname2") || die("Could not open $fname\n");
    print FILE $text;
    close(FILE);
    
    
    Ich vermute das Problem an der Stelle "$text .= "rm /Video/Proxies/*/".$line."*\n";"
    Da ich von perl null Ahnung habe, frage ich mich gerade wie rm das so finden soll, müßte da nicht zB ein "find exec rm" Zeiler hin, denn die oben genannten Dateien befinden sich
    auch noch mal in Unterordnern? Wäre dankbar für einen tip

    LG ACID25
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 fresh$free, 08.03.2014
    fresh$free

    fresh$free Jungspund

    Dabei seit:
    03.10.2013
    Beiträge:
    22
    Zustimmungen:
    0
    Kannst du mal ein paar Testdaten liefern, sonst kann man da keinen Rat geben.
     
  4. #3 bitmuncher, 10.03.2014
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Die Befehle werden ja lediglich in ein Shell-Skript geschrieben, das danach noch ausgeführt werden muss. Daher wird da auch nichts gelöscht.
     
  5. #4 derwunner, 16.03.2014
    derwunner

    derwunner Doppel-As

    Dabei seit:
    12.07.2011
    Beiträge:
    118
    Zustimmungen:
    0
    Wenn das mit der foreach schleife das Einlesen in die Liste sein soll, dann kann ich dir sagen, dass es so wenig Sinn macht. Eine Datei, die man mit den Cursor-Verfahren einliest wird Zeile für Zeile gelesen (innerhalb einer Schleife). Jedoch schließt du den Dateistream schon, bevor du mit dem Einlesen beginnst.

    Außerdem kommt nicht klar raus, was du machen willst. Und von einem Perl-Funktionsaufruf, der etwas löscht, lese ich in dem Skript auch nichts. Wie das geht siehe hier: http://www.tutorialspoint.com/perl/perl_files.htm
    Ansonsten einfach mal im Galileo openBook zu Perl nachlesen, wie die Dateiverarbeitung mit Perl geht.

    Generell gilt immer für alle Programmiersprachen das folgende Schema (Pseudocode):
    Code:
    Datei im lesenden Modus öffnen
    Zeile in variable lesen
    
    solange Zeile != null
     etwas tun mit der Zeile
     erneut in Variable Zeile einlesen
    Dateicursor schließen
    
    Hoffe, das konnte helfen.
     
  6. #5 bitmuncher, 16.03.2014
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Nein, das stimmt so nicht. Er öffnet die Datei, packt ihrer Inhalt in @lines_file (der Raumschiff-Operator sorgt bei Perl dafür, dass jede Zeile zu einem Array-Element wird) und schliesst daraufhin die Datei. Er kann also problemlos danach auf dem Array weiter arbeiten, und dort noch auf den zwischengespeicherten Inhalt der Datei zugreifen, was er ja auch tut.

    Ja, einen rm-Befehl gibt's in dem Perl-Skript nicht. Es generiert lediglich eine Text-Datei/ein Shell-Skript, das die rm-Befehle enthält.
    Code:
    $text .= "rm /Video/Proxies/*/".$line."*\n";
    ...
    print FILE $text;
    

    ... no comment ;)
     
  7. #6 derwunner, 16.03.2014
    derwunner

    derwunner Doppel-As

    Dabei seit:
    12.07.2011
    Beiträge:
    118
    Zustimmungen:
    0
    Ok, ja sorry, ich bin mit Perl nicht so familiär. Hatte das nur mal kurz benutzt. Naja, bei so einer Frage, die man eig durch googeln sich selbst beantworten könnte, kann ich nicht anders, als solche Links zu teilen. xD
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

perl script, das Dateien aus einer Liste löscht

Die Seite wird geladen...

perl script, das Dateien aus einer Liste löscht - Ähnliche Themen

  1. Perlscripts funktioniert nur bei Fehler!

    Perlscripts funktioniert nur bei Fehler!: Hallo, ich habe hier so ein ungewöhnliches Problem, dass mir noch nicht einmal ein sinnvoller Titel einfällt. Also folgendes, ein Perl Script...
  2. Was ist besser? Perl, Phyton, Ruby? für Shellscripting, Webscripts, kleine Programme

    Was ist besser? Perl, Phyton, Ruby? für Shellscripting, Webscripts, kleine Programme: Hi. Ich suche die "beste" Programmiersprache. mit der man die meißten Fliegen mit einer Klappe schlagen kann. Die gut ist für Shellscripting,...
  3. [Perl] Script zum ändern der Signatur in vB-Boards

    [Perl] Script zum ändern der Signatur in vB-Boards: Hallo, folgendes Script funktioniert beim gulli:board , aber leider nicht hier: #!/usr/bin/perl use LWP::UserAgent; $agent = new...
  4. Perl: Script zum setzen eines Proxys als Umgebungsvariable

    Perl: Script zum setzen eines Proxys als Umgebungsvariable: Hi Leutz, da ich manchmal mein Privatlaptop mit in die Firma nehme und kein Bock habe jedesmal 'export http_proxy' einzutippen, habe ich mir...
  5. Probs mit Perl script

    Probs mit Perl script: Moin zusammen, ich habe da ein kleines Problem und komme nicht weiter, ich hoffe Ihr könnt mir da Weiterhelfen. Und zwar ich habe ne aufgabe...