649 Stimmen

Welche Zeichen sind in Windows- und Linux-Verzeichnisnamen verboten?

Ich weiß, dass / ist unter Linux verboten, und unter Windows sind die folgenden Dinge verboten (Ich glaube) * . " / \ [ ] : ; | ,

Was fehlt mir noch?

Ich brauche jedoch einen umfassenden Leitfaden, der folgende Punkte berücksichtigt Doppelbyte-Zeichen berücksichtigt. Ein Link zu externen Quellen ist für mich in Ordnung.

Ich muss zunächst ein Verzeichnis im Dateisystem erstellen, dessen Name möglicherweise verbotene Zeichen enthalten kann, weshalb ich plane, diese Zeichen durch Unterstriche ersetzen. Anschließend muss ich dieses Verzeichnis und seinen Inhalt in eine Zip-Datei schreiben schreiben (mit Java), daher wäre ich für jeden zusätzlichen Ratschlag bezüglich der Namen von Zip-Verzeichnissen geschätzt werden.

1029voto

Christopher Oezbek Punkte 20239

Halten wir es einfach und beantworten wir zuerst die Frage.

  1. Das Verbotene druckbare ASCII-Zeichen sind:

    • Linux/Unix:

        / (forward slash)
    • Fenster:

        < (less than)
        > (greater than)
        : (colon - sometimes works, but is actually NTFS Alternate Data Streams)
        " (double quote)
        / (forward slash)
        \ (backslash)
        | (vertical bar or pipe)
        ? (question mark)
        * (asterisk)
  2. Nicht druckbare Zeichen

    Wenn Ihre Daten aus einer Quelle stammen, die nicht druckbare Zeichen zulässt, gibt es noch mehr zu prüfen.

    • Linux/Unix:

        0 (NULL byte)
    • Fenster:

        0-31 (ASCII control characters)

    Note : Unter Linux/Unix-Dateisystemen ist es zwar zulässig, Dateien mit Steuerzeichen im Dateinamen zu erstellen, es könnte ein Alptraum für die Benutzer sein, mit solchen Dateien umzugehen .

  3. Reservierte Dateinamen

    Die folgenden Dateinamen sind reserviert:

    • Fenster:

        CON, PRN, AUX, NUL 
        COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
        LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9

      (sowohl allein als auch mit beliebigen Dateierweiterungen, z. B. LPT1.txt ).

  4. Andere Regeln

    • Fenster:

      Dateinamen dürfen nicht mit einem Leerzeichen oder Punkt enden.

    • macOS:

      Sie haben zwar nicht darum gebeten, aber nur für den Fall: Doppelpunkt : und Schrägstrich / je nach Kontext nicht erlaubt sind (z.B. unterstützt Finder Schrägstriche, Terminal unterstützt Doppelpunkte). (Mehr Details)

268voto

Dour High Arch Punkte 21088

Ein "umfassender Leitfaden" für verbotene Zeichen in Dateinamen wird unter Windows nicht funktionieren, da es sowohl Dateinamen als auch Zeichen reserviert. Ja, Zeichen wie * " ? und andere sind verboten, aber es gibt eine unendliche Anzahl von Namen, die nur aus gültigen Zeichen bestehen, die verboten sind. Zum Beispiel sind Leerzeichen und Punkte gültige Zeichen für Dateinamen, aber Namen, die nur aus diesen Zeichen bestehen, sind verboten.

Windows unterscheidet nicht zwischen Groß- und Kleinbuchstaben, so dass Sie keinen Ordner mit dem Namen A wenn einer namens a existiert bereits. Schlimmer noch, scheinbar erlaubte Namen wie PRN y CON und viele andere, sind reserviert und nicht erlaubt. Windows hat auch mehrere Längenbeschränkungen; ein in einem Ordner gültiger Dateiname kann ungültig werden, wenn er in einen anderen Ordner verschoben wird. Die Regeln für Benennung von Dateien und Ordnern finden Sie in den Microsoft-Dokumenten.

Sie können im Allgemeinen keinen benutzergenerierten Text verwenden, um Windows-Verzeichnisnamen zu erstellen. Wenn Sie den Benutzern die Möglichkeit geben wollen, beliebige Namen zu verwenden, müssen Sie sichere Namen erstellen wie A , AB , A2 et al., speichern Sie benutzergenerierte Namen und ihre Pfadäquivalente in einer Anwendungsdatendatei, und führen Sie die Pfadzuordnung in Ihrer Anwendung durch.

Wenn Sie unbedingt benutzergenerierte Ordnernamen zulassen müssen, können Sie nur feststellen, ob sie ungültig sind, indem Sie Ausnahmen abfangen und annehmen, dass der Name ungültig ist. Selbst das birgt Gefahren, da sich die Ausnahmen, die bei verweigertem Zugriff, Offline-Laufwerken und fehlendem Speicherplatz ausgelöst werden, mit denen überschneiden, die bei ungültigen Namen ausgelöst werden können. Damit öffnen Sie eine riesige Büchse des Anstoßes.

91voto

Jonathan Leffler Punkte 694013

Unter Linux und anderen Unix-Systemen gibt es nur zwei Zeichen, die im Namen einer Datei oder eines Verzeichnisses nicht vorkommen dürfen, und zwar NUL '\0' und Schrägstrich '/' . Der Schrägstrich kann natürlich auch in einem Pfadnamen vorkommen und Verzeichnisbestandteile voneinander trennen.

Gerücht 1 Steven Bourne (der berühmte "Shell") soll ein Verzeichnis mit 254 Dateien gehabt haben, eine für jeden einzelnen Buchstaben (Zeichencode), der in einem Dateinamen vorkommen kann (außer / , '\0' ; der Name . war natürlich das aktuelle Verzeichnis). Es wurde zum Testen der Bourne-Shell verwendet und richtete bei unvorsichtigen Programmen, wie z.B. Backup-Programmen, routinemäßig großen Schaden an.

Andere Menschen haben die Regeln für Windows-Dateinamen behandelt, mit Links zu Microsoft y Wikipedia zu diesem Thema.

Beachten Sie, dass MacOS X ein Dateisystem hat, das Groß- und Kleinschreibung nicht berücksichtigt. Aktuelle Versionen scheinen den Doppelpunkt : in Dateinamen, obwohl das historisch gesehen nicht immer der Fall war:

$ echo a:b > a:b
$ ls -l a:b
-rw-r--r--  1 jonathanleffler  staff  4 Nov 12 07:38 a:b
$

POSIX definiert eine Zeichensatz für portable Dateinamen bestehend aus:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

Die Verwendung von Namen, die ausschließlich aus diesen Zeichen gebildet werden, vermeidet die meisten Probleme, obwohl Windows immer noch einige Komplikationen mit sich bringt.


1 Es waren Kernighan & Pike in ['The Practice of Programming'] (http://www.cs.princeton.edu/~bwk/tpop.webpage/), die dies in Kapitel 6, Testen, §6.5 Stresstests, sagten:

Als Steve Bourne seine Unix-Shell schrieb (die später als Bourne-Shell bekannt wurde), erstellte er ein Verzeichnis mit 254 Dateien mit einstelligen Namen, einen für jeden Byte-Wert außer '\0' und Schrägstrich, die beiden Zeichen, die in Unix-Dateinamen nicht vorkommen dürfen. Er verwendete dieses Verzeichnis für alle möglichen Tests der Mustererkennung und Tokenisierung. (Das Testverzeichnis wurde natürlich von einem Programm erstellt.) Jahrelang war dieses Verzeichnis der Fluch von File-Tree-Walking-Programmen; es testete sie bis zur Zerstörung.

Beachten Sie, dass das Verzeichnis Einträge enthalten haben muss . y .. also waren es wohl eher 253 Dateien (und 2 Verzeichnisse) oder 255 Namenseinträge, als 254 Dateien. Dies beeinträchtigt jedoch nicht die Wirksamkeit der Anekdote oder der darin beschriebenen sorgfältigen Tests.

_TPOP war zuvor bei http://plan9.bell-labs.com/cm/cs/tpop y http://cm.bell-labs.com/cm/cs/tpop aber beide sind jetzt (2021-11-12) kaputt. Siehe auch Wikipedia unter TPOP ._

48voto

AeonOfTime Punkte 926

Anstatt eine schwarze Liste von Zeichen zu erstellen, könnten Sie eine Whitelist . Alles in allem ist der Bereich der Zeichen, die in einem Datei- oder Verzeichnisnamen Sinn machen, recht kurz, und wenn Sie keine sehr spezifischen Anforderungen an die Namensgebung haben, werden Ihre Benutzer es Ihrer Anwendung nicht übel nehmen, wenn sie nicht die gesamte ASCII-Tabelle verwenden können.

Das Problem der reservierten Namen im Zieldateisystem wird dadurch nicht gelöst, aber mit einer Whitelist ist es einfacher, die Risiken an der Quelle zu mindern.

In diesem Sinne ist dies eine Reihe von Zeichen, die als sicher angesehen werden können:

  • Buchstaben (a-z A-Z) - bei Bedarf auch Unicode-Zeichen
  • Ziffern (0-9)
  • Unterstrich (_)
  • Bindestrich (-)
  • Weltraum
  • Punkt (.)

Und alle zusätzlichen sicheren Zeichen, die Sie zulassen möchten. Darüber hinaus müssen Sie nur noch einige zusätzliche Regeln für Leerzeichen und Punkte . Dies ist in der Regel ausreichend:

  • Der Name muss mindestens einen Buchstaben oder eine Zahl enthalten (um Punkte/Leerzeichen zu vermeiden)
  • Der Name muss mit einem Buchstaben oder einer Zahl beginnen (um führende Punkte/Leerzeichen zu vermeiden)
  • Der Name darf nicht mit einem Punkt oder einem Leerzeichen enden (schneiden Sie diese einfach ab, falls vorhanden, wie es der Explorer tut)

Dies erlaubt bereits recht komplexe und unsinnige Namen. Zum Beispiel wären diese Namen mit diesen Regeln möglich, und wären gültige Dateinamen in Windows/Linux:

  • A...........ext
  • B -.- .ext

Im Grunde genommen sollten Sie selbst bei so wenigen Zeichen auf der Whitelist immer noch entscheiden, was wirklich sinnvoll ist, und den Namen entsprechend validieren/anpassen. In einer meiner Anwendungen habe ich die gleichen Regeln wie oben verwendet, aber alle doppelten Punkte und Leerzeichen entfernt.

42voto

chrisjej Punkte 381

Der einfachste Weg, Windows dazu zu bringen, Ihnen die Antwort zu geben, ist der Versuch, eine Datei über den Explorer umzubenennen und einen umgekehrten Schrägstrich (/) als neuen Namen einzugeben. Windows zeigt ein Meldungsfenster an, in dem die Liste der unzulässigen Zeichen aufgelistet ist.

A filename cannot contain any of the following characters:
    \ / : * ? " < > | 

Microsoft Docs - Benennung von Dateien, Pfaden und Namensräumen - Benennungskonventionen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X