Frage Linux / Windows / Unix / ... Dateinamen: Welche Zeichen sind erlaubt? Welche sind nicht abgesichert?


Welche Zeichen sind erlaubt und welche von ihnen müssen auf der Kommandozeile in verschiedenen Betriebssystemen maskiert werden?


39
2018-06-12 21:24


Ursprung


Im Folgenden finden Sie einige nützliche Antworten, aber was möchten Sie erreichen? Es ist wahrscheinlich nicht die beste Route, deinen eigenen Charakter zu programmieren. - medina
Danke an alle! Alle Antworten sind hilfreich. Wofür ich die Informationen benötige ist: Ich schreibe ein Tool, mit dem Dateien im Dateisystem markiert werden, indem deren Namen geändert werden (keine Metadaten). - java.is.for.desktop
Siehe auch Antwort auf Superuser. - pevik


Antworten:


Es gibt eine Diskussion von Dateinamen im Wikipedia-Artikel auf Dateinamen.

Sie können diesen Aufsatz informativ finden: Fixieren von Unix / Linux / POSIX-Dateinamen.

Dieser Artikel vergleicht OS X und Windows XP: X vs. XP: Verbotene Zeichen in Dateinamen (PDF, siehe pp ca. 64-66).

Dinge, die nicht in Dateinamen für $ 1.000 sein sollten Alex

Ich weiß nicht, welche Charaktere sein müssen un-escaped, aber in Linux ist es wahrscheinlich keine gute Idee, den Zeichen zu entkommen, die eine besondere Bedeutung haben, wie "n" (Newline), "t" (Tab) und andere, aber das ist im Allgemeinen kein Problem bei Dateioperationen. Vielleicht meinst du "entflohen" statt "unausgebildet". Die gebräuchlichsten sind diejenigen, die die Shell interpretieren wird, wie zB Leerzeichen, ">", "<" usw. Siehe einige der Artikel, die ich verlinkt habe, um diese zu diskutieren.


26
2018-06-12 22:29



Dies ist nicht wirklich eine Antwort - alle Informationen sind extern. Und einige dieser Links sind jetzt gebrochen. - Steve Bennett


Die einzigen Zeichen, die in einem Dateinamen in * nix nicht erlaubt sind, sind NUL und /. Nur in Windows NUL, :, und \ sind wirklich nicht erlaubt, aber viele Apps schränken das weiter ein und verhindern auch ?, *, +, und %.

Zu keinem Zeitpunkt irgendwelche Zeichen in einem Dateinamen brauchen außer bei Bedarf, um nicht von der Shell interpretiert zu werden.


24
2018-06-12 22:27



Der zweite Punkt verdient Nachdruck. Gewöhnlich bezieht sich "fluchtend" auf einen Shell-Mechanismus, der es dem Benutzer erlaubt, Strings (z. B. Pfadnamen) anzugeben, die Zeichen enthalten, die die Shell ansonsten auf besondere Weise behandeln würde. Wenn das OP bedeutet, etwas wie "Prozentcodierung" zu verwenden, um andernfalls unzulässige Zeichen zu codieren, dann ist dies ein reines "Pfadnamen-Protokoll" auf Anwendungsebene, das jedes beteiligte Programm annehmen muss (oder nicht). - Chris Johnsen
Ich scanne einen Ordner mit readdir und versuche dann, die Dateien mit den Namen zu öffnen, die sie zurückgibt. Einige von ihnen scheitern mit ENOENT, was nahelegt, dass man selbst für das Betriebssystem manchmal fliehen muss? - gman


Wenn Sie eine Datei in Windows mit Explorer mit einem der folgenden Zeichen erstellen, wird es sich beschweren, dass die Zeichen nicht erlaubt sind:

\ / : * ? " < > |

Eine gute Referenz ist hier:

Benennen von Dateien, Pfaden und Namespaces
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx 

Microsoft erklärt weiter:

"... auf Windows-basierten Desktop-Plattformen können ungültige Pfadzeichen die ASCII / Unicode-Zeichen 1 bis 31 sowie quote ("), kleiner als (<), größer als (>), pipe (|), Backspace enthalten (\ b), null (\ 0) und tab (\ t). "

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx 


12
2018-06-12 23:08



Ich erinnere mich, dass ich vor ein paar Jahren gelesen habe, dass Windows im Benutzermodus diese Einschränkungen hat und die Groß- / Kleinschreibung nicht beachtet ("ABC.txt" === "abc.txt"). Kernel-Modus Windows hat jedoch weniger Einschränkungen und unterscheidet zwischen Groß- und Kleinschreibung ("ABC.txt"! == "abc.txt" wie * NIX). Die oben genannten Zeichen gelten jedoch für die meisten Programme, da sie im Benutzermodus ausgeführt werden. - CubicleSoft


Auf Linux- und anderen POSIX-kompatiblen Systemen ist "/" reserviert, da es das Verzeichnistrennzeichen ist, und "\ 0" (das NULL-Zeichen) bezeichnet das Ende der Zeichenfolge. Alles andere ist erlaubt.


4
2018-06-12 22:27



Es wird jedoch dringend empfohlen, Zeilenumbrüche, Tabulatoren, Steuerzeichen und Ähnliches zu vermeiden und sicherzustellen, dass der Dateiname gültiges UTF-8 ist. - Flimm