GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

Halten wir es einfach und beantworten zuerst die Frage.

  1. Die verbotenen druckbaren ASCII-Zeichen sind:

    • Linux/Unix:

      / (forward slash)
      
    • Windows:

      < (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 zulassen würde, müssen Sie nach mehr suchen.

    • Linux/Unix:

      0 (NULL byte)
      
    • Windows:

      0-31 (ASCII control characters)
      

    Hinweis: Während es unter Linux/Unix-Dateisystemen legal ist, Dateien mit Steuerzeichen im Dateinamen zu erstellen, könnte es für die Benutzer ein Albtraum sein, mit solchen Dateien umzugehen.

  3. Reservierte Dateinamen

    Folgende Dateinamen sind reserviert:

    • Windows:

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

      (sowohl alleine als auch mit beliebigen Dateiendungen, z.B. LPT1.txt ).

  4. Andere Regeln

    • Windows:

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


Eine „umfassende Anleitung“ für verbotene Dateinamenzeichen wird unter Windows nicht funktionieren, da sie 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. Beispielsweise sind Leerzeichen und Punkte gültige Dateinamenzeichen, aber Namen, die nur aus diesen Zeichen bestehen, sind verboten.

Windows unterscheidet nicht zwischen Groß- und Kleinschreibung, daher können Sie keinen Ordner mit dem Namen A erstellen wenn man a nennt ist bereits vorhanden. Schlimmere, scheinbar erlaubte Namen wie PRN und 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 zum Benennen von Dateien und Ordnern finden Sie in der Microsoft-Dokumentation.

Im Allgemeinen können Sie keinen benutzergenerierten Text verwenden, um Windows-Verzeichnisnamen zu erstellen. Wenn Sie Benutzern erlauben möchten, beliebige Namen zu nennen, müssen Sie sichere Namen wie A erstellen , AB , A2 speichern benutzergenerierte Namen und ihre Pfadäquivalente in einer Anwendungsdatendatei und führen eine Pfadzuordnung in Ihrer Anwendung durch.

Wenn Sie benutzergenerierte Ordnernamen unbedingt zulassen müssen, besteht die einzige Möglichkeit, festzustellen, ob sie ungültig sind, darin, Ausnahmen abzufangen und anzunehmen, dass der Name ungültig ist. Selbst das ist mit Gefahren behaftet, da sich die Ausnahmen, die für verweigerten Zugriff, Offline-Laufwerke und zu wenig Speicherplatz ausgelöst werden, mit denen überschneiden, die für ungültige Namen ausgelöst werden können. Du öffnest eine riesige Schadensdose.


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

Gerüchten zufolge hatte Steven Bourne (bekannt als „Shell“) ein Verzeichnis mit 254 Dateien, eine für jeden einzelnen Buchstaben (Zeichencode), der in einem Dateinamen vorkommen kann (außer / , '\0'; den Namen . war natürlich das aktuelle Verzeichnis). Es wurde verwendet, um die Bourne-Shell zu testen, und richtete routinemäßig Verwüstungen bei unvorsichtigen Programmen wie Sicherungsprogrammen an.

Andere Leute haben die Windows-Regeln abgedeckt.

Beachten Sie, dass MacOS X ein Dateisystem hat, bei dem die Groß-/Kleinschreibung nicht beachtet wird.

Es waren Kernighan &Pike in The Practice of Programming, die in Kapitel 6, Testen, §6.5 Stresstests, so viel sagten:

Als Steve Bourne seine Unix-Shell schrieb (die als Bourne-Shell bekannt wurde), erstellte er ein Verzeichnis mit 254 Dateien mit Namen aus einem Zeichen, eine für jeden Bytewert außer '\0' und Schrägstrich, die beiden Zeichen, die in Unix-Dateinamen nicht vorkommen dürfen. Er verwendete dieses Verzeichnis für alle Arten von Mustererkennungs- und Tokenisierungstests. (Das Testverzeichnis wurde natürlich von einem Programm erstellt.) Jahre später war dieses Verzeichnis der Fluch von Programmen, die Dateibäume durchwanderten; es hat sie auf die Probe gestellt.


Linux
  1. Linux – Was sind High Memory und Low Memory unter Linux?

  2. Was sind Linux-Prozesse, -Threads, leichte Prozesse und Prozessstatus?

  3. Was sind SELinux-Benutzer und wie werden Linux-Benutzer SELinux-Benutzern zugeordnet?

  4. Wie verwende ich / (Verzeichnistrennzeichen) sowohl unter Linux als auch unter Windows in Python?

  5. Was sind die nativen Betriebssystem-/Systemaufrufe von Windows und Linux, die von malloc() ausgeführt werden?

Benennen Sie alle Dateien und Verzeichnisnamen in Linux in Kleinbuchstaben um

Was sind Snaps und wie wird es auf verschiedenen Linux-Distributionen installiert?

Was sind Linux-Protokolle und wo sind sie zu finden?

Welches Dateisystem soll verwendet werden, wenn sowohl Windows als auch Linux verwendet werden?

Was sind die Unterschiede zwischen Linux- und Windows-.txt-Dateien (Unicode-Codierung)

Wie werden \n und \r unter Linux und Windows unterschiedlich gehandhabt?