Linux / Windows / Unix /… Dateinamen: Welche Zeichen sind erlaubt? Welche sind ungeschoren?

43

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

java.ist.für.desktop
quelle
Im Folgenden finden Sie einige nützliche Antworten, aber was möchten Sie erreichen? Es ist wahrscheinlich nicht die beste Methode, Ihre eigenen Whitelist-Routinen zu programmieren.
Medina
Danke an alle! Alle Antworten sind hilfreich. Ich benötige folgende Informationen: Ich schreibe ein Tool, mit dem Dateien im gesamten Dateisystem mit Tags versehen werden, indem ihre Namen geändert werden (keine Metadaten).
java.is.for.desktop
Siehe auch Antwort auf Superuser .
Pevik

Antworten:

26

Im Wikipedia-Artikel über Dateinamen wird auf Dateinamen eingegangen .

Sie finden diesen Aufsatz möglicherweise informativ: Beheben von Unix- / Linux- / POSIX-Dateinamen .

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

Dinge, die nicht in Dateinamen für 1.000 US-Dollar sein sollten Alex

Ich weiß nicht , welche Zeichen müssen un -escaped, aber in Linux, es ist wahrscheinlich keine gute Idee , um die Zeichen zu entkommen , die besondere Bedeutung wie „n“ (Newline), „t“ (tab) und andere haben kann, Aber das ist im Allgemeinen kein Problem bei Dateioperationen. Vielleicht meinen Sie "entkommen" und nicht "entkommen". Die gebräuchlichsten sind solche, die von der Shell interpretiert werden, z. B. Leerzeichen, ">", "<" usw. In einigen der von mir verlinkten Artikel werden diese erläutert.

Dennis Williamson
quelle
7
Dies ist keine wirkliche Antwort - alle Informationen sind extern. Und einige dieser Links sind jetzt defekt.
Steve Bennett
26

Die einzigen Zeichen, die in einem Dateinamen in * nix nicht zulässig sind, sind NULund /. In Windows, nur NUL, :und \sind wirklich nicht erlaubt, aber viele Anwendungen beschränken , dass weitere, auch zu verhindern ?, *, +, und %.

Zu keinem Zeitpunkt tut in einem Dateinamen alle Zeichen müssen außer entgangen sein , wie erforderlich , um nicht von der Shell interpretiert werden.

Ignacio Vazquez-Abrams
quelle
Der zweite Punkt verdient Nachdruck. Normalerweise bezieht sich "Escape" auf einen Shell-Mechanismus, mit dem der Benutzer Zeichenfolgen (z. B. Pfadnamen) angeben kann, die Zeichen enthalten, die die Shell ansonsten auf besondere Weise behandeln würde. Wenn das OP so etwas wie "Prozentcodierung" zum Codieren von ansonsten nicht zulässigen Zeichen verwendet, ist dies ein "Pfadnamenprotokoll" auf Anwendungsebene, das jedes beteiligte Programm verwenden muss (oder nicht).
Chris Johnsen
Ich scanne einen Ordner mit readdir und versuche dann, die Dateien mit den zurückgegebenen Namen zu öffnen. Einige von ihnen lassen sich nicht mit ENOENT öffnen, was darauf hindeutet, dass Sie selbst für das Betriebssystem manchmal entkommen müssen?
gman
13

Wenn Sie unter Windows mit Explorer eine Datei mit einem der folgenden Zeichen erstellen, wird beanstandet, dass die Zeichen nicht zulässig 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 führt weiter aus:

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

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

Greg Askew
quelle
Ich erinnere mich, dass ich vor ein paar Jahren gelesen habe, dass Windows im Benutzermodus diese Einschränkungen hat und nicht nur zwischen Groß- und Kleinschreibung unterscheidet ("ABC.txt" === "abc.txt"). Windows im Kernel-Modus unterliegt jedoch weniger Einschränkungen und unterscheidet zwischen Groß- und Kleinschreibung ("ABC.txt"! == "abc.txt" genau wie * NIX). In jeder Hinsicht gelten die obigen Zeichen jedoch für die meisten Programme, da sie im Benutzermodus ausgeführt werden.
CubicleSoft
Ich kann \ / : * ? " < > |allen entkommen und sie mit mkdir auf meinem GNU / Linux-System erstellen. Mit können Sie auch mkdir '?'das ?Verzeichnis erstellen . Ich habe das Ramdisk- und XFS-Dateisystem verwendet, um das zu testen.
S.Goswami
5

Auf Linux- und anderen POSIX-kompatiblen Systemen ist "/" als Verzeichnistrennzeichen reserviert, und "\ 0" (das Nullzeichen) kennzeichnet das Ende der Zeichenfolge. Alles andere ist erlaubt.

Janneb
quelle
1
Es wird jedoch dringend empfohlen, Zeilenumbrüche, Tabulatoren, Steuerzeichen und ähnliches zu vermeiden und sicherzustellen, dass der Dateiname UTF-8-gültig ist.
Flimm,