Welche technischen Gründe gibt es dafür, keine Leerzeichen in Dateinamen zu verwenden?

75

Jemand, den ich kenne, äußerte sich heute verärgert über diejenigen von uns, die dazu neigen, keine Leerzeichen in unseren Dateinamen zu verwenden, z. B. NamingThingsLikeThis.txt- trotz der meisten modernen Betriebssysteme, die Leerzeichen in Dateinamen unterstützen.

Gibt es technische Gründe , warum es immer noch üblich ist, Dateinamen ohne (geeignete) Leerzeichen anzuzeigen? Wenn ja, aus welchen technischen Gründen werden Leerzeichen in Dateinamen vermieden oder entmutigt, und unter welchen Umständen sind sie relevant?

Der offensichtlichste Grund, an den ich denken könnte und warum ich ihn normalerweise vermeide, sind die zusätzlichen Anführungszeichen in der Befehlszeile, die beim Umgang mit solchen Dateien erforderlich sind. Gibt es noch andere wichtige technische Gründe?

Chris W. Rea
quelle
Wie Sie sagten, sind sie auf der Kommandozeile viel einfacher zu handhaben. Und für die Programmierung bin ich mir nicht sicher, ob es überhaupt möglich oder machbar ist, Leerzeichen in Dateinamen zu verwenden.
Alvin Row

Antworten:

66

Whitespace-Zeichen in Dateinamen können in vielen Kontexten auf der Befehlszeile und in Skripten, in denen Sie darauf achten müssen, dass sie ordnungsgemäß maskiert werden, ein echtes Problem sein Laufen.

Es ist nur sicherer, sie nicht dort zu haben, auch wenn Sie sicher sind, dass die Datei / dir / what-ever in einem solchen Kontext niemals verwendet wird.

Das und alte Gewohnheiten sterben schwer.

David Spillett
quelle
Sie sind auch ein richtiger königlicher Schmerz, mit dem man sich auseinandersetzen muss, dann muss man Pfade zusammenstellen und sie modifizieren. Vergewissern Sie sich, dass die Komponenten vor dem erneuten Entweichen / Zitieren nicht in Anführungszeichen gesetzt und nicht für Änderungen freigegeben wurden, insbesondere, wenn Teile an andere Codebits gesendet werden, die manipuliert werden sollen.
afrazier
2
Wenn Sie der Meinung sind, dass Leerzeichen schlecht sind, versuchen Sie, Dateien mit newlines ( '\n') in ihren Namen zu behandeln. (Unix-ähnliche Systeme ermöglichen dies tatsächlich; Windows im Allgemeinen oder erschwert es zumindest.)
Keith Thompson
31

Neben den anderen Antworten zu Befehlszeile und alten Gewohnheiten gibt es auch viele Netzwerkprotokolle, die besondere Sorgfalt beim Umgang mit Dateinamen erfordern, die Leerzeichen enthalten.

(Wenn Sie jemals versucht haben, "Product List.pdf" von einer Website herunterzuladen und eine Datei mit dem Namen "Product" erhalten haben, hat Sie das gebissen, weil der Programmierer am anderen Ende es nicht wusste oder nicht konnte die Angebotsregeln für den http Content-Disposition-Header nicht herausfinden.)

Stobor
quelle
11
+1. HTTP für den Anfang. Leerzeichen in URLs (für jedes Protokoll, nicht nur HTTP) sollten an% 20 oder + ausgegeben werden. Verwirrung kann entstehen, wenn sie nicht so codiert sind, wie sie sein sollten. Für Webseiten gibt es einen visuellen Grund, beide Leerzeichen und den häufig zum Ersetzen verwendeten Unterstrich ("_") zu vermeiden. Sie können in einem unterstrichenen Link gleich aussehen, sodass jemand den Link manuell kopieren oder vorlesen kann es ist falsch.
David Spillett
5
Eines der nervigsten Dinge an Leerzeichen, die in URLs kodiert werden müssen, ist die Tendenz, dass bestimmte Software die Leerzeichen kodiert hält ...
SamB
Ist das echt? Im Jahr 2018 passiert das?
Chris Calo
@ChrisCalo Sie werden vielleicht bemerken, dass diese Antwort im Jahr 2009 gegeben wurde, nicht im Jahr 2018. Aber ja, das passiert auch im Jahr 2018. Möglicherweise seltener, jetzt, da die meisten Anfänger-Entwickler Frameworks verwenden, um Websites zu erstellen, anstatt alles von Grund auf neu zu machen, aber es ist immer noch so ein Problem.
Stobor
28

Viele Gründe sind historisch. Das heißt nicht, dass sie heute keinen Sinn ergeben.

Probleme bei der Portabilität

Beim Benennen einer Datei müssen Sie möglicherweise auch berücksichtigen, wie andere (Datei-) Systeme diesen Dateinamen behandeln. Ein Zeichen in einem Dateinamen ist möglicherweise in Ordnung für Ihr System, kann jedoch ein Problem für ein anderes System darstellen.

Solange also die geringste Möglichkeit bestand, dass Sie von einem älteren System aus problemlos auf die Datei zugreifen möchten, würden Sie nur sichere Zeichen auswählen . Dies kann das Booten in ein altes Wiederherstellungssystem beinhalten, das Sie in der Nähe haben, oder die Befürchtung, dass neuere Windows-Versionen immer noch irgendwie auf MS-DOS basieren.

Länge

Ein Dateisystem kann die Länge einer Datei begrenzen. Dies war in den Tagen, in denen MS-DOS auf 8.3-Dateinamen beschränkt war, noch schwerwiegender . Wenn Sie Leerzeichen weglassen, können Sie aussagekräftigere Zeichen in den Namen einfügen.

Einige andere Dateisysteme definierten ebenfalls strenge Grenzen für die Länge ihrer Dateinamen. Wikipedia hat eine Tabelle im Artikel über Dateisystemvergleich für diejenigen, die die Details wollen.

Reservierte Zeichen

MS-DOS hat das Leerzeichen auch als reserviertes Zeichen definiert. Dies ist darauf zurückzuführen, dass das Leerzeichen zum Auffüllen der FAT verwendet wurde . Darüber hinaus hat MS-DOS kein Escape-System in der Shell bereitgestellt.

Befehlszeileninterpretation

Den meisten Befehlszeilen ist bekannt, dass das Leerzeichen als Parameterbegrenzer verwendet wird . Wenn Sie es versäumen, einen Dateinamen ordnungsgemäß zu maskieren, kann dies schwerwiegende Folgen haben, da Teile des Dateinamens als Parameter für die Anwendung interpretiert werden können, die Sie aufrufen möchten.

Betrachten Sie den Unterschied zwischen

rm foo bar

und

rm "foo bar"

Der oben verlinkte WikiPedia-Artikel weist sogar auf Mehrdeutigkeiten hin, die dadurch entstanden sind, dass ein Befehl nicht ordnungsgemäß umgangen werden konnte:

Mehrdeutigkeiten können verhindert werden, indem eingebettete Leerzeichen in Datei- und Verzeichnisnamen zunächst verboten werden (z. B. durch Unterstriche '_' ersetzt werden) oder wenn dies vom Befehlszeileninterpreter und den Programmen unterstützt wird, die diese Parameter als verwenden Argumente, indem Sie einen Namen mit eingebetteten Leerzeichen zwischen Anführungszeichen setzen oder ein Escape-Zeichen vor dem Leerzeichen verwenden, normalerweise einen Backslash ('\'). Zum Beispiel

Long path/Long program name Parameter one Parameter two ...

ist mehrdeutig (ist "Programmname" Teil des Programmnamens oder zwei Parameter?); jedoch

Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...

und Long \ path / Long \ program \ name Parameter \ one Parameter \ two ...

sind nicht mehrdeutig.

Uniform Resource Locators (URL)

Beim Versuch, den Speicherort einer Datei mithilfe einer URL zu beschreiben, müssen Leerzeichen maskiert werden.

Zeichen können aus mehreren Gründen unsicher sein. Das Leerzeichen ist unsicher, da signifikante Leerzeichen verschwinden und unwichtige Leerzeichen eingefügt werden können, wenn URLs transkribiert oder gesetzt oder Textverarbeitungsprogrammen unterzogen werden.

Quelle: RFC1738

Daher muss ein Leerzeichen durch ein ersetzt %20werden. Dies macht den Dateinamen-Teil der URL weniger lesbar und die Leute meiden ihn daher an erster Stelle.

Der Hochstapler
quelle
25

Leerzeichen werden %20im Web in Dateinamen codiert oder konvertiert , was die Verwaltung der Assets einer Site erschwert.

Haben Image 1.pngund Image%201.pngist verwirrend. Es ist einfacher zu benutzen Image001.png.

Dies fällt wirklich unter dieselbe Kategorie wie Escape-Sequenzen für die Befehlszeile.

user7012
quelle
5

Manchmal können Leerzeichen ein Problem darstellen, wenn Sie sich in der Befehlszeile befinden, wenn Sie ältere Betriebssysteme verwenden oder wenn Sie Programme schreiben, die auf verschiedenen Betriebssystemen kompiliert werden, oder wenn ... es viele Gründe gibt, die problematisch sein können. Ich habe nicht wirklich das Gefühl, dass es so schwierig ist , die Datei wie folgt zu schreiben: file-without-blanks.txt oder file_without_blanks.txt . Ich bevorzuge das Bindestrich, weil der Unterstrich manchmal unsichtbar wird, wenn es sich zum Beispiel um unterstrichene Schrift handelt.

Meistens ist es aber Gewohnheitssache ab dem Alter. Was ich nicht denke, dass es genug professionelle Gründe gibt, aufzugeben.


Ein zusätzlicher Hinweis, möglicherweise nicht im Zusammenhang, aber ich werde es trotzdem hier setzen. Leute, die ihre Dateien mit Leerzeichen benennen, denken normalerweise nicht viel darüber nach. diejenigen, die nicht oft wissen, warum es gut ist, sie in Dateinamen zu vermeiden.
Und wir sind uns alle einig, dass es nichts Schlimmeres gibt als eine Datei mit dem Namen "Sehr geehrte Damen und Herren, ich schreibe Ihnen diesen Brief, um Sie über yo.doc zu informieren".

Nicht nur Leerzeichen - die Dateilänge zählt auch für etwas, und meiner Meinung nach sollte sie nicht länger als 30 Zeichen sein. Denn lange Dateinamen mit Leerzeichen sind auch ein Segen beim Aufnehmen von CDs, DVDs und dergleichen, die unter älteren Betriebssystemen und zwischen Windows- und * nix-Plattformen gelesen werden müssen.

Turm
quelle
2
Lazy Word-Benutzer ...
SamB