Tina: 0-Byte Datei nicht löschbar

Hallo Jungs :-)

ich hab ein (hausgemachtes) Problem. Durch einen Fehler in meinem PHP-Script wurde eine Datei (*. - JA, so heißt die Datei :(( ) in einem Verzeichnis erzeugt, die keine Extention besitzt und 0-Byte groß ist. Die Rechte sind lt. FTP-Voyager auf 777 gesetzt. Dennoch kann ich das File nicht löschen, oder umbenennen. Demnach lässt sich das Verzeichnis auch nicht löschen, da es ja nicht leer ist. :/

Versuche das File per chmod z.B. auf 666 zu setzen schlugen fehl, da ich keinen "richtigen" Namen für chmod angeben kann.

Hätte vielleicht jemand von Euch einen Tipp für mich, wie das Ding wieder wegbekomme?

liebe Grüße
Tina

  1. Hallo Tina,

    Durch einen Fehler in meinem PHP-Script wurde eine Datei (*. - JA, so heißt die Datei :(( ) in einem Verzeichnis erzeugt,

    ähm, wie jetzt? Ein Stern und ein Punkt als Dateiname? Das mit dem Punkt ist ja noch okay, aber der Stern dürfte da garantiert nicht vorkommen. Wie hast du denn das angestellt, ts ts ts...  ;-)

    Versuche das File per chmod z.B. auf 666 zu setzen schlugen fehl, da ich keinen "richtigen" Namen für chmod angeben kann.

    Wieso? Akzeptiert chmod keine Wildcards? Das Suchmuster ?. müsste doch auf den -zugegebenermaßen ungültigen- Dateinamen passen. Ich erinnere mich, dass ich solche Tricks damals unter DOS gern angewendet habe, wenn durch einen Unfall mal wieder eine Datei mit einem ungültigen Namen entstanden war. Die nicht erlaubten Zeichen einfach mit einem Fragezeichen übergehen.

    Vielleicht kommst du damit weiter...

    So long,

    Martin

    1. Hallo,

      ähm, wie jetzt? Ein Stern und ein Punkt als Dateiname? Das mit dem Punkt ist ja noch okay, aber der Stern dürfte da garantiert nicht vorkommen. Wie hast du denn das angestellt, ts ts ts...  ;-)

      Wenn Du an eine Linux-Console kommst, kannst Du es ausprobieren:

      touch "*."

      ls -l

      viele Grüße

      Axel

      1. Hallo Axel,

        Wenn Du an eine Linux-Console kommst, kannst Du es ausprobieren:

        Komme ich nicht, also darf ich knobeln. Meine Unix/Linux-Kenntnisse sind Stückwerk, aber naja...

        touch "*."

        Nach meinem Verständnis ändert dieses Kommando das Änderungsdatum aller Dateien, deren Name mit einem Punkt endet, auf "jetzt". Hier ist die Angabe "*." doch nur ein Suchmuster: Der Stern repräsentiert eine beliebige Anzahl beliebiger Zeichen, danach muss ein Punkt stehen. Dadurch entsteht doch kein neuer Dateiname, geschweige denn ein verbotener. Oder wie?

        So long,

        Martin

        1. Hallo,

          Komme ich nicht, also darf ich knobeln. Meine Unix/Linux-Kenntnisse sind Stückwerk, aber naja...

          touch "*."

          Nach meinem Verständnis ändert dieses Kommando das Änderungsdatum aller Dateien, deren Name mit einem Punkt endet, auf "jetzt". Hier ist die Angabe "*." doch nur ein Suchmuster: Der Stern repräsentiert eine beliebige Anzahl beliebiger Zeichen, danach muss ein Punkt stehen.

          Das, was Du beschreibst macht

          touch *.

          Dadurch entsteht doch kein neuer Dateiname, geschweige denn ein verbotener. Oder wie?

          Doch, wenn die Option -c, --no-create  nicht angegeben ist, legt touch auch Dateien an. Im speziellen Fall eine Datei mit dem Namen "*."

          Und nein, der Name ist nicht verboten, nur sehr ungünstig gewählt ;-)).

          viele Grüße

          Axel

        2. hallo,

          touch "*."
          Nach meinem Verständnis ändert dieses Kommando das Änderungsdatum aller Dateien, deren Name mit einem Punkt endet, auf "jetzt".

          Aus der man-page: "Update the access and modification times of each FILE to the current time".

          Hier ist die Angabe "*." doch nur ein Suchmuster: Der Stern repräsentiert eine beliebige Anzahl beliebiger Zeichen, danach muss ein Punkt stehen.

          Jaein. Bei
             touch *.
          hättest du recht. Das Einschließen in die "" bewirkt jedoch, daß genau _diese_ Einzeldatei, deren Name aus dieser Zeichenfolge besteht, geändert wird.

          Dadurch entsteht doch kein neuer Dateiname, geschweige denn ein verbotener. Oder wie?

          Doch. Es entsteht nicht nur ein solcher neuer Dateiname, sondern eine solche 0 Byte große Datei wird auch neu angelegt, falls sie nicht existiert. Ich habs grade mal auf der Konsole durchgespielt. Es gibt eine ganze Reihe von Konsolenbefehlen, die, falls eine Datei mit dem angegebenen Namen (noch) nicht existiert, sie eben neu anlegen, und wenn nötig, dann auch ohne Inhalt. Dann existiert lediglich der Dateiname. Und den kann man mit
             rm "*."
          tatsächlich selektiv wieder loswerden. Würde dagegen
             rm *.
          eingetippt, wird auch eine eventuell existierende Datei test. ebenfalls gelöscht, unabhängig davon, ob sie Inhalt hat oder nicht.

          Fazit: Was Axel vorgeschlagen hat, ist eher als "Sicherheitsabfrage" zu verstehen. rm würde völlig ausreichen.

          Grüße aus Berlin

          Christoph S.

          --
          Visitenkarte
          ss:| zu:) ls:& fo:) va:) sh:| rl:|
      2. Hi Axel,

        Wenn Du an eine Linux-Console kommst, kannst Du es ausprobieren:

        touch "*."

        ls -l

        FAST :)) Ich hab einfach rm *.* gemacht. Und schon sind alle bösen Dateien weg. :))
        Komischerweise hieß die Datei an der Console *.* statt *.
        Naja, jetzt komm ich jedenfalls weiter. Danke an alle!

        grüßle
        Tina

        1. hallo Tina,

          Ich hab einfach rm *.* gemacht. Und schon sind alle bösen Dateien weg. :))

          Bist du sicher, daß das eirklich nur "böse" Dateien waren? Falls du eine Datei namens "test.test" dort liegen hattest, ist die jetzt auch unwiederbringlich fort.

          Grüße aus Berlin

          Christoph S.

          --
          Visitenkarte
          ss:| zu:) ls:& fo:) va:) sh:| rl:|
          1. gudn tach!

            Ich hab einfach rm *.* gemacht. Und schon sind alle bösen Dateien weg. :))

            Bist du sicher, daß das eirklich nur "böse" Dateien waren?

            hat sie ja nicht gesagt. "alle boesen dateien sind weg" ist noch keine aussage ueber die nicht-boesen dateien.
            "nur alle boesen dateien sind weg" (oder "genau alle boesen dateien sind weg") wuerde dagegen auch ueber etwaige nicht-boese dateien eine aussage machen.

            prost
            seth

            1. hallo seth,

              Ich hab einfach rm *.* gemacht. Und schon sind alle bösen Dateien weg. :))
              Bist du sicher, daß das eirklich nur "böse" Dateien waren?
              hat sie ja nicht gesagt. "alle boesen dateien sind weg" ist noch keine aussage ueber die nicht-boesen dateien.

              Wow, du entwickelst dich zum Sophistiker ;-)

              Nein, das hat sie tatsächlich nicht gesagt.

              "nur alle boesen dateien sind weg" (oder "genau alle boesen dateien sind weg") wuerde dagegen auch ueber etwaige nicht-boese dateien eine aussage machen.

              Ich bezweifle, daß Tina in der Lage sein wird, den Finessen deiner Argumentation verständnisvoll zu folgen.

              Grüße aus Berlin

              Christoph S.

              --
              Visitenkarte
              ss:| zu:) ls:& fo:) va:) sh:| rl:|
  2. Hi!

    ich hab ein (hausgemachtes) Problem. Durch einen Fehler in meinem PHP-Script wurde eine Datei (*. - JA, so heißt die Datei :(( ) in einem Verzeichnis erzeugt, die keine Extention besitzt und 0-Byte groß ist. Die Rechte sind lt. FTP-Voyager auf 777 gesetzt. Dennoch kann ich das File nicht löschen, oder umbenennen. Demnach lässt sich das Verzeichnis auch nicht löschen, da es ja nicht leer ist. :/

    Hast du denn bereits versucht, die Datei mittels der PHP-Funktion unlink() zu löschen bzw. mal einen anderen FTP-Client (--> FileZilla) zu versuchen?

    Grüße,
    Fabian St.

  3. Hi,

    danke für die Antworten. Wie ich eine Datie Namens *. hinbekommen habe, weiß nur das Script selbst. :))

    Es funktionieren keine Wildcards, wie *. oder ?. Ebenso klappt unlink() nicht. :((

    Hiiiiilfeee .... :)

    lieber Gruß
    Tina

  4. Hallo,

    *. - JA, so heißt die Datei :(( Dennoch kann ich das File nicht löschen, oder umbenennen.

    rm "*."

    oder FTP

    delete "*."

    viele Grüße

    Axel

  5. Moin!

    ich hab ein (hausgemachtes) Problem. Durch einen Fehler in meinem PHP-Script wurde eine Datei (*. - JA, so heißt die Datei :(( ) in einem Verzeichnis erzeugt,

    ...

    Hätte vielleicht jemand von Euch einen Tipp für mich, wie das Ding wieder wegbekomme?

    Für das Archiv:

    Eine solche Datei lässt sich auf einer Konsole (bash) mit:

    rm "*." definitiv löschen. Sollte das mittels FTP nicht gehen und es sich um einen Webserver handeln hilft folgendes:

    Variante 1: (CGI)

    delthis.sh:

    #! /bin/sh
    rm "*.";
    echo -e "Content-type: text/plain\n\n";
    rm delthis.sh;
    ls -al

    Diese Datei wird wie ein Perl-Skript mit Ausführungs- und Schreibrechten versehen und dann im Webbrowser aufgerufen. Sie löscht sich selbst.

    Variante 2 (PHP)
    delthis.php

    <?php
    $dummy=rm "\*."; # Da stehen wirklich Backticks!
    $dummy=rm delthis.php; # Da stehen wirklich Backticks!
    header("Content-type: text/plain");
    $dummy=ls -al;
    echo $dummy;
    ?>

    Diese Datei wird auch ganz normal in das gleiche Verzeichnis wie die zu löschende Datei übertragen, via Browser aufgerufen und löscht sich ebenfalls selbst.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
  6. Hallo Mädel,

    welches Betriebssystem/Filesystem ist das denn?
    Das würde mich abschließend nochmal interessieren.

    Und wenn es Linux ist, dann müsste es doch mit einer Maskierung \ der Sonderzeichen funktionieren, oder? Leerzeichen im Dateinamen maskiert man schließlich auch mit \

    LG
    Chris

    1. hallo,

      welches Betriebssystem/Filesystem ist das denn?

      Vermutlich ein UNIX-Derivat.

      Und wenn es Linux ist, dann müsste es doch mit einer Maskierung \ der Sonderzeichen funktionieren, oder? Leerzeichen im Dateinamen maskiert man schließlich auch mit \

      Wie kommst du darauf? Es handelt sich bei * auch nicht um ein Sonderzeichen, sondern um einen Platzhalter.

      Grüße aus Berlin

      Christoph S.

      --
      Visitenkarte
      ss:| zu:) ls:& fo:) va:) sh:| rl:|
      1. Moin!

        Wie kommst du darauf? Es handelt sich bei * auch nicht um ein Sonderzeichen, sondern um einen Platzhalter.

        NEIN!

        Die bourne-shell (sh), bourne-again-shell (bash) löst das Zeichen zu "alle Dateinamen im Verzeichnis" auf. Beweis: # echo *

        Also ist UNIX/Linux egal.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    2. Hallo,

      Und wenn es Linux ist, dann müsste es doch mit einer Maskierung \ der Sonderzeichen funktionieren, oder?

      Ja, auch das würde funktionieren:

      touch \*.

      ls -l
      ... ... ... ... 0 Okt 8 13:22 *.
      ...

      Ich wollte ihr nur ersparen, ein Konstrukt wie:

      rm \*.

      zu verstehen.

      rm "*."

      oder

      rm '*.'

      ist meiner Meinung nach eingängiger.

      Leerzeichen im Dateinamen maskiert man schließlich auch mit \

      Man vielleicht, ich schließe solche Dateinamen immer in Anfühungszeichen ein.

      viele Grüße

      Axel