Font

Dateien löschen

[thread]14609[/thread]


hide all open all
  • close +22 replies
  • close close lukastonner  2010-02-07 19:15 #132185 #132185
    User since
    2010-02-07
    39 articles
    [default_avatar]  
    Hallo Community. Eine einfache Frage und wahrscheinlich schon 1000 mal beantwortet. In dem Ordner „datasource“ befinden sich einige Textdateien die ich löschen möchte. Der Pfad ist in einem Starterscript als Umgebungsvariable deklariert. (/home/xx/xx/datasource
    ). Irgendwie funktioniert es so nicht die Dateien zu löschen. Auch nicht über den Weg eine „Inhaltsdatei“ zu erzeugen (siehe code) Als Fehlermeldung bekomme ich immer: rm: /home/xx/xx/xx is a directory. Wie bekomme ich die Dateien gelöscht???? Es ist keine CGI Programmierung. Würde mich über Hilfe freuen.


    Mein Code:

    Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
        $datasource=$ENV{'datasource'};

    opendir(DIR, "$datasource");
    my @inhalt = readdir(DIR);
    print @inhalt,"\n";
    closedir(DIR);
    system ("rm", "$datasource");
    #oder….
    system ("rm", "@inhalt");


    //Modedit GwenDragon: Code-Tags
    Last edited: 2010-02-07 20:03:08 +01:00
    • close bianca  2010-02-07 19:18 #132187 #132187
      User since
      2009-09-13
      1812 articles

      user image  
      Dateien lösche ich immer mit unlink
      Siehe perldoc -f unlink
      Und danach mit rm die Verz. löschen.
      10 print "Hallo"
      20 goto 10
    • close +20 replies
    • close close renee  2010-02-07 19:19 #132188 #132188
      User since
      2003-08-04
      13300 articles
      [Homepage]
      [default_avatar]  
      Du versuchst ja auch das Verzeichnis zu löschen...

      Die Dateien bekommst Du so gelöscht:
      Code (perl):
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      
      use File::Spec;
      
      $datasource=$ENV{'datasource'};
      
      # hole die Einträge
      opendir(DIR, "$datasource");
      my @inhalt = readdir(DIR);
      closedir DIR;
      
      # für jeden Eintrag
      for my $entry ( @inhalt ) {
      
          # setze den vollständigen Pfad zusammen
          my $path = File::Spec->catfile( $datasource, $entry );
      
          # verzeichnisse sollen nicht gelöscht werden
          next if -d $path;
      
          # lösche Eintrag
          unlink $path;
      }
      • close havi  2010-02-07 19:42 #132190 #132190
        User since
        2003-08-04
        1976 articles
        [Homepage]

        user image  
        2010-02-07T18:19:33 renee
        # hole die Einträge
        opendir(DIR, "$datasource");
        my @inhalt = readdir(DIR);
        closedir DIR;
        }[/code]


        ... und am besten du fragst die jeweilige Aktion auch immer mit
        Code (perl):
        or die $!
        ab... also so:

        Code (perl):
        1
        2
        3
        
        opendir(DIR, "$datasource") or die $!;
        my @inhalt = readdir(DIR);
        closedir DIR or die $!;


        ... und noch besser, du verwendest lexikalische FH..., also so:
        Code (perl):
        1
        2
        3
        
        opendir(my $fhDir, "$datasource") or die $!;
        my @inhalt = readdir($fhDir);
        closedir $fhDir or die $!;


        ... hat Renee aber sicher in der Eile nur vergessen...
        nachzulesen nämlich in seinem Blog ;)

        http://reneeb-perlblog.blogspot.com/search/label/o...

        Gruß,
        Gernot
      • close +18 replies
      • close close lukastonner  2010-02-07 20:05 #132195 #132195
        User since
        2010-02-07
        39 articles
        [default_avatar]  
        vielen dank für die schnelle antwort und ich werde es morgen früh gleich versuchen.geht es nicht einfacher (ohne die geschichte mit dem @inhalt???). Es kann doch nicht so schwer sein einfach ein paar Textdateien aus einem Ordner zu löschen. Muss man den weg darüber gehen sich erst den Inhalt zu holen?
        Ich habe gelesen dass der Befehl unlink für CGI Programmierung gedacht ist und damit die Daten nicht physikalisch gelöscht werden.
        • close +13 replies
        • close close pq  2010-02-07 20:08 #132197 #132197
          User since
          2003-08-04
          8347 articles
          [Homepage]

          user image  
          2010-02-07T19:05:44 lukastonner
          geht es nicht einfacher (ohne die geschichte mit dem @inhalt???). Es kann doch nicht so schwer sein einfach ein paar Textdateien aus einem Ordner zu löschen. Muss man den weg darüber gehen sich erst den Inhalt zu holen?

          wie willst du eine liste von dateien löschen, wenn du vorher nicht weisst, wie die heissen? kapier ich nicht. natürlich musst du dir vorher die dateiliste holen.
          Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
          lesen: Wiki:Wie frage ich & Perldoc:perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
          • close +4 replies
          • close close lukastonner  2010-02-07 20:13 #132199 #132199
            User since
            2010-02-07
            39 articles
            [default_avatar]  
            ich möchte einfach ALLE Dateien löschen die sich in dem Ordner befinden, wie die heissen ist egal.... Wofür brauch ich denn dann die Liste? Dachte das geht einfacher. Einfach Pfad angeben und alles raushauen....
            • close pq  2010-02-07 20:16 #132202 #132202
              User since
              2003-08-04
              8347 articles
              [Homepage]

              user image  
              nun ja, entweder du löschst das verzeichnis selbst komplett oder alle darin befindlichen dateien. zu letzterem brauchst du nunmal zuerst die liste.
              wo ist jetzt das problem?
              benutz halt glob, wenn dir das mit readdir zu blöd ist. perldoc -f glob oder http://p3rl.org/glob
              unlink $_ for glob("verzeichnis/*.txt"); oder so in etwa
              Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
              lesen: Wiki:Wie frage ich & Perldoc:perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
            • close +2 replies
            • close close pq  2010-02-07 20:30 #132211 #132211
              User since
              2003-08-04
              8347 articles
              [Homepage]

              user image  
              wenn du das verzeichnis gleich *mitlöschen* willst, geht das natürlich in perl viel eleganter (nicht von bianca verwirren lassen, wenn sie mitmacht, artet so ein thread immer ein bisschen aus).
              benutze CPAN:File::Path (die funktion remove_tree).
              das ist sogar im core
              Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
              lesen: Wiki:Wie frage ich & Perldoc:perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
              • close lukastonner  2010-02-07 20:43 #132213 #132213
                User since
                2010-02-07
                39 articles
                [default_avatar]  
                das Verzeichnis soll nicht mitgelöscht werden, und,- ich bin kein windows user. arbeite auf ner solaris maschine.....
          • close +8 replies
          • close close bianca  2010-02-07 20:15 #132201 #132201
            User since
            2009-09-13
            1812 articles

            user image  
            2010-02-07T19:08:25 pq
            wie willst du eine liste von dateien löschen, wenn du vorher nicht weisst, wie die heissen? kapier ich nicht. natürlich musst du dir vorher die dateiliste holen.

            Window'ser kennen RMDIR /s um ganze Bäume zu löschen (da haben wir es wieder....) und das sucht er, was ich durchaus verstehen kann.
            :)
            10 print "Hallo"
            20 goto 10
            • close +7 replies
            • close close pq  2010-02-07 20:17 #132203 #132203
              User since
              2003-08-04
              8347 articles
              [Homepage]

              user image  
              und das löscht nicht das verzeichnis selbst mit?

              linuxer kennen rm -rf. und was wollten wir jetzt damit wieder beweisen, fräulein bianca?
              Last edited: 2010-02-07 20:18:48 +01:00
              Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
              lesen: Wiki:Wie frage ich & Perldoc:perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
              • close +6 replies
              • close close bianca  2010-02-07 20:24 #132207 #132207
                User since
                2009-09-13
                1812 articles

                user image  
                2010-02-07T19:17:25 pq
                und das löscht nicht das verzeichnis selbst mit?

                linuxer kennen rm -rf. und was wollten wir jetzt damit wieder beweisen, fräulein bianca?

                doch, rmdir /s löscht das Verzeichnis selbst mit.
                Aber rmdir in Perl löscht m.W. nur leere Verzeichnisse und nicht den ganzen Baum. Dafür müsste man dann wieder per system() für rm -rf o.ä. ran, wenn ich das richtig überblicke.

                Und für jemanden, der aus der DOS-Shell unter Win rmdir /s kennt - was für alle Linuxer natürlich anlog rm -rf gilt! - mag es evtl. etwas umständlich aussehen, dass man mit Perl erst die Dateien zusammensuchen und einzeln löschen muss, bevor man das Verz. weg bekommt.
                Nur das meinte ich. Sonst garnichts.
                10 print "Hallo"
                20 goto 10
                • close +4 replies
                • close close pq  2010-02-07 20:28 #132209 #132209
                  User since
                  2003-08-04
                  8347 articles
                  [Homepage]

                  user image  
                  2010-02-07T19:24:25 bianca

                  Nur das meinte ich. Sonst garnichts.

                  ja sicher. und der satz "da haben wir es wieder" ist dir nur so rausgerutscht, nicht wahr ;-)

                  in perl kann man wunderbar auch verzeichnise löschen. mit File::Path::remove_tree.
                  das kann der ein oder andere user gut gebrauchen, ausser leute mit kaputten windows-installationen, die keine module installieren können.
                  Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
                  lesen: Wiki:Wie frage ich & Perldoc:perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
                  • close +3 replies
                  • close close bianca  2010-02-08 11:43 #132238 #132238
                    User since
                    2009-09-13
                    1812 articles

                    user image  
                    2010-02-07T19:28:10 pq
                    ja sicher. und der satz "da haben wir es wieder" ist dir nur so rausgerutscht, nicht wahr ;-)

                    Das war bezogen auf das Löschen ganzer Bäume :)
                    Wie im anderen Thread.

                    Edit: Komisch, heute morgen war Quote noch richtig, jetzt (19:58) ist es falsch, obwohl ich nicht dran war. Hab es mal korrigiert.

                    Edit2: Achso, der Baum wurde abgetrennt. Dabei ist wahrscheinlich versehentlich editiert worden. OK, alles klar.
                    Last edited: 2010-02-08 20:00:02 +01:00
                    10 print "Hallo"
                    20 goto 10
                    • close +2 replies
                    • close close pq  2010-02-08 21:46 #132306 #132306
                      User since
                      2003-08-04
                      8347 articles
                      [Homepage]

                      user image  
                      2010-02-08T10:43:09 bianca
                      Edit2: Achso, der Baum wurde abgetrennt. Dabei ist wahrscheinlich versehentlich editiert worden. OK, alles klar.

                      niemand hat da versehentlich was editiert. in der history sind nur zwei edits von dir zu sehen. hast das eine öffnende quote wohl heute morgen übersehen. kann ja mal passieren.
                      Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
                      lesen: Wiki:Wie frage ich & Perldoc:perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
                      • close bianca  2010-02-09 08:32 #132312 #132312
                        User since
                        2009-09-13
                        1812 articles

                        user image  
                        2010-02-08T20:46:00 pq
                        niemand hat da versehentlich was editiert. in der history sind nur zwei edits von dir zu sehen. hast das eine öffnende quote wohl heute morgen übersehen. kann ja mal passieren.

                        Rutscht der Thread denn in der "Letzte 24h" auch nach oben (ohne fett markiert zu sein), wenn etwas rausgetrennt wird?
                        10 print "Hallo"
                        20 goto 10
                • close sid burn  2010-02-08 00:10 #132218 #132218
                  User since
                  2006-03-29
                  1520 articles

                  user image  
                  Quote
                  Aber rmdir in Perl löscht m.W. nur leere Verzeichnisse

                  Ein "rmdir" unter Linux löscht auch nur leere Verzeichnisse.
                  Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
        • close +2 replies
        • close close bianca  2010-02-07 20:13 #132200 #132200
          User since
          2009-09-13
          1812 articles

          user image  
          2010-02-07T19:05:44 lukastonner
          Ich habe gelesen dass der Befehl unlink für CGI Programmierung gedacht ist und damit die Daten nicht physikalisch gelöscht werden.

          Das ist ja komplettes durcheinander. unlink ist ein Perlbefehl zum Löschen von Dateien. Du verwechselst das mit symbolischen Links unter Linux. Das hat aber wiederum soviel mit CGI zu tun, wie ein Affe mit Fahrrad fahren :)
          10 print "Hallo"
          20 goto 10
          • close lukastonner  2010-02-07 20:29 #132210 #132210
            User since
            2010-02-07
            39 articles
            [default_avatar]  
            2010-02-07T19:13:07 bianca
            2010-02-07T19:05:44 lukastonner
            Ich habe gelesen dass der Befehl unlink für CGI Programmierung gedacht ist und damit die Daten nicht physikalisch gelöscht werden.

            Das ist ja komplettes durcheinander. unlink ist ein Perlbefehl zum Löschen von Dateien. Du verwechselst das mit symbolischen Links unter Linux. Das hat aber wiederum soviel mit CGI zu tun, wie ein Affe mit Fahrrad fahren :)

            ich versuch nochmal mein glück. vielen dank an alle
        • close +2 replies
        • close close pq  2010-02-07 20:33 #132212 #132212
          User since
          2003-08-04
          8347 articles
          [Homepage]

          user image  
          du hast insofern recht, dass die daten nicht gelöscht werden. die datei ist dann nur nicht mehr im system verlinkt, weshalb sie sozusagen gelöscht ist. die funktion heisst aber unlink, weil es nunmal nu rein unlink ist.

          wenn du dateien wirklich löschen willst, musst du sie schon komplett mit dummy-daten überschreiben. aber das hat nichts mit perl zu tun.
          du kannst also ruhig unlink benutzen, es sei denn, du willst deine festplatte mit sensiblen daten komplett reinigen, so dass auch ein recovery nicht mehr an die daten rankommt.
          der hinweis von bianca auf symbolische links ist insofern etwas irreführend, da unlink tatsächlich einen link entfernt. aber einen anderen als den symbolischen.
          Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
          lesen: Wiki:Wie frage ich & Perldoc:perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
          • close betterworld  2010-02-08 20:01 #132303 #132303
            User since
            2003-08-21
            2363 articles
            [Homepage]

            user image  
            2010-02-07T19:33:55 pq
            wenn du dateien wirklich löschen willst, musst du sie schon komplett mit dummy-daten überschreiben.

            Weitere Diskussion zu dem Thema habe ich in einen neuen Thread verschoben: Festplattendaten unwiederbringlich löschen
            To my continued amazement, the Perl folks are the only ones who never get upset. They just say "Haha, yeah, boy, you're right, it sure is ugly. Heh. Yeah, so, um, anyway, I'm going to get back to work now..." It's awesome. I've gained so much respect for them. src

View all threads created 2010-02-07.

[Powered by Battie]
Powered by Perl
Powered by Pound
Some Icons are from
Fugue Icons
Impressum