Netti: Verzeichniss löschen

Hallo,

dir zeigt mir u.a.

verz11
verz11\r\n

Wincommander zeigt mir diese beiden Verzeichnisse als

verz11
verz11

an.

$ rm -r verz11\r\n
verz11rn: No such file or directory

Und wie lösche ich das nun?

Lg, Netti

  1. Zusatz:

    $ rm -r verz11\r\n
    verz11\r\n: No such file or directory

  2. perl -Mautodie -e'rmdir "verz11\r\n"'

    Oder im Midnight Commander (Befehl »mc«) den Eintrag markieren (Taste »Einfg«) und löschen (Taste »F8«).

    1. perl -Mautodie -e'rmdir "verz11\r\n"'

      Oder im Midnight Commander (Befehl »mc«) den Eintrag markieren (Taste »Einfg«) und löschen (Taste »F8«).

      Tuts Beides leider nicht.

      :-( Kjorni

      1. Kann sich keiner einen Reim darauf machen, was hier auf "meinem Server passiert?"

        Ich weiß jetzt wohl, woher das kommt (obwohl es vorher nie so war und ich nichts geändert habe zwischenzeitlich):

        Ich habe ein Script, was mir Verzeichnisse und Dateien kopieren soll. Vorhandene Dateien (oder Verteichnisse) wurden dabei immer überschrieben.

        Nun wird anstattdessen dieser komische \r\n-Ordner angelegt, obwohl das Script unverändert ist.

        Hier die Funktion:

          
        function copyFolder($source, $dest, &$statsCopyFolder, $recursive = TRUE)  
        {  
             if (!is_dir($dest))  
             {  
                  mkdir($dest);  
             }  
             $handle = @opendir($source);  
             if(!$handle)  
                  return false;  
             while ($file = @readdir ($handle))  
             {  
                  if (eregi("^\.{1,2}$",$file))  
                  {  
                       continue;  
                  }  
                  if(!$recursive && $source != $source.$file."/")  
                  {  
                       if(is_dir($source.$file))  
                            continue;  
                  }  
                  if(is_dir($source.$file))  
                  {  
                       copyFolder($source.$file."/", $dest.$file."/", $statsCopyFolder, $recursive);  
                  }  
                  else  
                  {  
                       copy($source.$file, $dest.$file);  
                       echo($dest.$file."<br>");  
                       $statsCopyFolder['files']++;  
                       $statsCopyFolder['bytes'] += filesize($source.$file);  
                  }  
             }  
             @closedir($handle);  
        } // end of function  
          
        
        

        Weiß denn gar keiner einen Rat, ich verzweifle hier grad :-((

        Grüße, Kjorni

        1. Mir ist es inzwischen gelungen, diese seltsamen \r\n-Ordner zu löschen:

            
          <?php  
          function delete($file) {  
          chmod($file,0777);  
          if (is_dir($file)) {  
           $handle = opendir($file);  
           while($filename = readdir($handle)) {  
            if ($filename != '.' && $filename != '..') {  
            delete($file."/".$filename);  
            }  
           }  
          closedir($handle);  
           rmdir($file);  
          } else {  
          unlink($file);  
          }  
          }  
            
          delete("verz11\r\n");  
          echo("fertig");  
          ?>  
          
          

          Aber kann mir mal jemand sagen, warum die überhaupt angelegt werden und weder einsehbar noch löschbar sind?

          Was bedeutet das denn?

          Grüße, Kjorni

        2. Hallo,

          Kann sich keiner einen Reim darauf machen, was hier auf "meinem Server passiert?"

          es ist doch ganz einfach: "Jemand", also vermutlich irgendein Script, hat Verzeichnisse angelegt, in deren Namen Steuerzeichen vorkommen. Das sollte man zwar aus Gründen, die du inzwischen erlebt hast, vermeiden. Aber es ist nicht verboten.

          function copyFolder($source, $dest, &$statsCopyFolder, $recursive = TRUE)
          {
               if (!is_dir($dest))
               {
                    mkdir($dest);
               }

          Genau hier bekam das Script wohl in irgendeiner Situation ein $dest übergeben, das mit CRLF, also \r\n abgeschlossen war, und hat brav ein Verzeichnis mit diesem Namen angelegt. Mit einem einfachen

          rmdir("verz\r\n");

          hätte man es garantiert auch wieder löschen können (passende Zugriffsrechte vorausgesetzt).

          Ciao,
           Martin

          --
          Männer sind ungerecht: Sie sehen immer nur den Baum, den eine Frau mit dem Auto gerammt hat. Aber die vielen Bäume, die sie nicht einmal gestreift hat, sehen sie nicht.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Hi,

            es ist doch ganz einfach:

            Puuuuh, sowas les ich grad sehr gerne ;-)

            Und tatsächlich, Du bringst Licht in die Sache.

            Aber es ist nicht verboten.

            Das wußte ich gar nicht.

            Genau hier bekam das Script wohl in irgendeiner Situation ein $dest übergeben, das mit CRLF, also \r\n abgeschlossen war, und hat brav ein Verzeichnis mit diesem Namen angelegt.

            Das kann wirklich sein, denn die Sdest kommen aus einer Datei, in dem in jeder Zeile ein $dest drin steht und arbeitet die in einer Schleife ab.

            Sollte also für mich möglich sein, das CRLF aus dem $dest zu löschen. trim() macht das aber nicht, ne?

            rmdir("verz\r\n");

            hätte man es garantiert auch wieder löschen können (passende Zugriffsrechte vorausgesetzt).

            Völlig korrekt, das stimmt.

            Bleiben aber 2 Fragen offen:

            1. Warum greift der ominöse \r\n-Ordner, wenn ich ihn öffne, auf den originalen Ordner zu? (Wobei, das müßte ich vor der Frage nochmal gegenchecken...kann sein, dass ich mich hier gerade irre.)

            2. Warum macht das Script das erst heute und all die Monate zuvor noch nicht?

            Ich habe weder Script noch Server gewechselt.

            Erstmal vielen vielen Dank für die Hilfe!

            Kjorni

            Ciao,
            Martin

            1. Das kann wirklich sein, denn die Sdest kommen aus einer Datei, in dem in jeder Zeile ein $dest drin steht und arbeitet die in einer Schleife ab.

              Sollte also für mich möglich sein, das CRLF aus dem $dest zu löschen. trim() macht das aber nicht, ne?

              Ohne Kenntnis über die verwendete Programmiersprache dürfte eine Antwort schwer fallen.

              Ich vermute du redest von Perl, dann solltest du dich mit chomp beschäftigen.

              Struppi.

              1. Ich vermute du redest von Perl, ...

                falsch. Wohl eher PHP, da weiß ich nicht ob chomp existiert, aber du könntest ja suchen..

                Struppi.

              2. Ich vermute du redest von Perl, dann solltest du dich mit chomp beschäftigen.

                Hi Struppi,

                hach ja, chop und chomp kenne ich noch aus alten Perl-Tagen :-)

                Gruß, Kjorni

            2. Hallo,

              es ist doch ganz einfach:
              Puuuuh, sowas les ich grad sehr gerne ;-)

              ;-)

              Genau hier bekam das Script wohl in irgendeiner Situation ein $dest übergeben, das mit CRLF, also \r\n abgeschlossen war, und hat brav ein Verzeichnis mit diesem Namen angelegt.
              Das kann wirklich sein, denn die Sdest kommen aus einer Datei, in dem in jeder Zeile ein $dest drin steht und arbeitet die in einer Schleife ab.

              Und liest die Datei vermutlich zeilenweise mit fgets(). Diese Funktion liefert eine Zeile aus der Datei *einschließlich* des abschließenden Zeilenumbruchs.

              Sollte also für mich möglich sein, das CRLF aus dem $dest zu löschen. trim() macht das aber nicht, ne?

              Schau ins Manual. Da steht's explizit beschrieben.

              rmdir("verz\r\n");
              hätte man es garantiert auch wieder löschen können (passende Zugriffsrechte vorausgesetzt).
              Völlig korrekt, das stimmt.

              Warum bist du nicht auf die Idee gekommen?

              1. Warum greift der ominöse \r\n-Ordner, wenn ich ihn öffne, auf den originalen Ordner zu? (Wobei, das müßte ich vor der Frage nochmal gegenchecken...kann sein, dass ich mich hier gerade irre.)

              Wie greifst du darauf zu? Von einer Shell, die den abschließenden Zeilenumbruch ihrerseits als Ende der Befehlszeile betrachtet? Möglicherweise lässt sich der mc auch täuschen, indem er einfach davon ausgeht, dass Dateinamen keine Steuerzeichen enthalten.

              1. Warum macht das Script das erst heute und all die Monate zuvor noch nicht?

              Gute Frage. Nächste Frage?

              Ich habe weder Script noch Server gewechselt.

              Aber vielleicht hat der Hoster irgendeine Einstellung verändert?

              Ciao,
               Martin

              --
              Vielseitigkeit: Von vielen Dingen keine Ahnung haben.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Hi Martin,

                Und liest die Datei vermutlich zeilenweise mit fgets(). Diese Funktion liefert eine Zeile aus der Datei *einschließlich* des abschließenden Zeilenumbruchs.

                Nein, ich lese sie über $array = file("./datei.txt"); // Datei in ein Array einlesen

                Schau ins Manual. Da steht's explizit beschrieben.

                Oh? trim macht das doch?

                Warum bist du nicht auf die Idee gekommen?

                Bin ich doch. Schau in mein 2. verzweiflungspost, da stehts drin.

                Wie greifst du darauf zu? Von einer Shell, die den abschließenden Zeilenumbruch ihrerseits als Ende der Befehlszeile betrachtet? Möglicherweise lässt sich der mc auch täuschen, indem er einfach davon ausgeht, dass Dateinamen keine Steuerzeichen enthalten.

                Über wincommander.

                Aber vielleicht hat der Hoster irgendeine Einstellung verändert?

                Hab ich auch schon drüber nachgedacht.

                Jetzt läuft auf jeden Fall dank Deiner Hilfe weider alles so wie es soll.

                Dankeschön, Kjorni

                1. Hallo,

                  Schau ins Manual. Da steht's explizit beschrieben.
                  Oh? trim macht das doch?

                  tja, wer hätte das gedacht! :-)

                  Warum bist du nicht auf die Idee gekommen?
                  Bin ich doch. Schau in mein 2. verzweiflungspost, da stehts drin.

                  Stimmt, wer lesen kann ...
                  Hab ich übersehen.

                  Wie greifst du darauf zu? [...]
                  Über wincommander.

                  Aha, und dann über FTP? Dann ist es klar. Ein FTP-Client fordert vom Server eine Liste des Verzeichnisinhalts an. Die bekommt er in Textform, jede Zeile eine Datei. Wenn ein Dateiname seinerseits einen Zeilenumbruch enthält, "zerfällt" der Name in zwei Zeilen, die jeweils einen Teil des Namens enthalten.
                  Den Namen "verz\r\n" bekommt er dann als "verz" in einer Zeile und zusätzlich einem Leerstring in einer weiteren Zeile (die er vermutlich ignoriert).

                  Ciao,
                   Martin

                  --
                  Man sollte immer wissen was man sagt
                   - aber auf keinen Fall alles sagen, was man weiß.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  1. Hi Martin,

                    Oh? trim macht das doch?

                    tja, wer hätte das gedacht! :-)

                    Aha, und dann über FTP? Dann ist es klar. Ein FTP-Client fordert vom Server eine Liste des Verzeichnisinhalts an. Die bekommt er in Textform, jede Zeile eine Datei.

                    Hach, ich bin schon wieder viel  schlauer als noch heute morgen :-)

                    Und alles auf meinem Server läuft wieder wie gewohnt.

                    Guter Tag, danke für Deine Hilfe hierzu.

                    Gruß, Kjorni

  3. Hi.

    Betreff: Verzeichniss löschen

    Und wie lösche ich das nun?

    Vielleicht mit einer Läuseharke? ;)

    Schönen Sonntag noch!
    O'Brien

    --
    Frank und Buster: "Heya, wir sind hier um zu helfen!"