Welche gängigen Zeichen sind in Unix- UND Windows-Dateisystemen illegal?

7

Hallo, ich suche nach einem Zeichen in Unix- und Windows-Dateisystemen, das in Datei- und Verzeichnisnamen nicht zulässig ist, und habe mich gefragt, ob es ein solches Zeichen gibt (ich habe festgestellt, dass * und% zulässig sind).

Yazz.com
quelle
Bitte ändern Sie entweder den Titel oder die Frage so, dass beide ungefähr dasselbe sind.
John Gardeniers

Antworten:

11

Es gibt kein "Unix" -Dateisystem. Dazu kommt auch kein "Windows" -Dateisystem. Meinen Sie NTFS, FAT16, FAT32, ext2, ext3, ext4 usw. Jedes hat seine eigenen Einschränkungen für gültige Zeichen in Namen.

Auch beziehen sich Ihr Fragentitel und Ihre Frage auf zwei völlig unterschiedliche Konzepte? Möchten Sie die Teilmenge der zulässigen Zeichen kennen oder möchten Sie wissen, welche Platzhalterzeichen in beiden Systemen verwendet werden können?

http://en.wikipedia.org/wiki/Ext3 gibt an, dass "alle Bytes außer NULL und '/'" in Dateinamen zulässig sind.

http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx beschreibt den generischen Fall für gültige Dateinamen "unabhängig vom Dateisystem". Insbesondere sind folgende Zeichen <> reserviert: "/ \ |? *

Windows beschränkt außerdem die Nichtverwendung von Gerätenamen für Dateien: CON, PRN, AUX, NUL, COM1, COM2, COM3 usw.

Die meisten Befehle in Windows- und Unix-basierten Betriebssystemen akzeptieren * als Platzhalter. Windows akzeptiert% als Platzhalter für einzelne Zeichen, während Shells für Unix-Systeme? als Single Char Wildcard.

Steve Folly
quelle
2
Technisch gesehen befindet sich die Einschränkung des Gerätenamens nur im Win32-Subsystem. Sie können mit POSIX unter Windows wie in Cygwin Dateien erstellen, die diese Zeichenfolgen enthalten.
Mfinni
Oh, gute Punkte.
Mfinni
"Die meisten Befehle in Windows- und Unix-basierten Betriebssystemen akzeptieren * als Platzhalter. Windows akzeptiert% als Platzhalter für einzelne Zeichen, während Shells für Unix-Systeme? Als Platzhalter für einzelne Zeichen verwenden." - Diese werden in der Shell erweitert, nicht im Prozess. Shell legt möglicherweise seine eigene Syntax und Einschränkungen offen - und normalerweise Mittel zum Entkommen. Es ist beispielsweise möglich, eine Bash-Datei zu erstellen, die sie enthält touch '*'. Wenn dies eine gute Idee ist, ist ein separates Thema ...
Maciej Piechotka
4

Die meisten Dateisysteme sind recht freizügig: Beispielsweise erlauben alle NTFS, extN, btrfs, XFS und ReiserFS alles außer 1) dem Nullbyte und 2) dem Schrägstrich /.

Das Betriebssystem hat möglicherweise seine eigenen Einschränkungen. Insbesondere die Win32 0 API Verhindert * ? als Platzhalter, \ /als Pfadtrenn, :als Strom Separator und < > | "ohne guten Grund 1 . Ebenfalls nicht zulässig sind ASCII-Steuerzeichen (Bereich 0x00-0x1F).


Unter Unix erfolgt die Platzhaltererweiterung durch die Shell und die glob()Funktion. In Windows ist es die Aufgabe der Dateisystem - Treiber, weshalb ist *und ?in Dateinamen nicht verwendet werden kann.


0 Ich habe keine Informationen zu den von Windows angebotenen POSIX- und OS / 2-APIs.

1 Sie sind etwas Besonderes in der Befehlszeilen-Shell ( cmd.exe), aber sie könnte (und tut es tatsächlich) auch mit dem Entkommen umgehen, wie es Unix-Shells tun.

user1686
quelle
2

Es hängt wirklich vom Dateisystem ab, aber die meisten Unix-Dateisysteme erlauben jedes Byte außer NULL und /. NTFS erlaubt alle außer NULL und \ /: *? "<> |.

Auf Wikipedia gibt es eine äußerst hilfreiche Vergleichstabelle: http://en.wikipedia.org/wiki/Comparison_of_file_systems

Das heißt, fast alle Shells erkennen * zuerst als Platzhalter und als Zeichen in einem Dateinamen, wenn sie entkommen. Warum sollte use * nicht verwendet werden?

Cakemox
quelle
2

*sollte in beiden Fällen als Platzhalter funktionieren, aber es ist die Shell oder der aufgerufene Befehl, der diese Dinge erweitert, und nicht das Dateisystem selbst. Bash wird beispielsweise *zu einer durch Leerzeichen getrennten Liste von Dateien im aktuellen Ordner erweitert.

Ich glaube nicht, dass eines der Dateisysteme ausdrücklich Zeichen verbietet. Es ist durchaus möglich, Dateinamen auf ext2 oder NTFS mit Namen wie zu erstellen *&(. Die Windows-Benutzeroberfläche lässt Sie möglicherweise nicht zu, aber Sie können dies in Cygwin tun, da das zugrunde liegende Dateisystem dies zulässt.

SmallClanger
quelle