Wo finde ich je nach Betriebssystem eine Liste der zulässigen Zeichen in Dateinamen? (zB unter Linux ist das Zeichen :
in Dateinamen erlaubt, aber nicht unter Windows)
Wo finde ich je nach Betriebssystem eine Liste der zulässigen Zeichen in Dateinamen? (zB unter Linux ist das Zeichen :
in Dateinamen erlaubt, aber nicht unter Windows)
Antworten:
Sie sollten mit der Wikipedia-Dateinamenseite beginnen . Es verfügt über eine Tabelle mit angemessener Größe ( Vergleich der Dateinamenbeschränkungen ), in der die reservierten Zeichen für eine Vielzahl von Dateisystemen aufgeführt sind.
Es enthält auch eine Vielzahl weiterer Informationen zu jedem Dateisystem, einschließlich reservierter Dateinamen, z. B. CON
unter MS-DOS. Ich erwähne das nur, weil ich einmal davon gebissen wurde, als ich eine Include-Datei von const.h
bis verkürzte con.h
und eine halbe Stunde damit verbrachte, herauszufinden, warum der Compiler hängen blieb.
Stellt sich heraus , DOS ignoriert Erweiterungen für Geräte , so dass con.h
genau das gleiche wie war con
, die Eingabekonsole (was bedeutet, natürlich, der Compiler wartete für mich in Typ der Header - Datei , bevor sie fortfahren würde).
POSIX "Fully portable filenames"
Eintrag ansehen , in dem folgende aufgeführt sind:A–Z a–z 0–9 . _ -
OK, sehen Sie sich also den Vergleich von Dateisystemen an, wenn Sie sich nur für die Dateisysteme der Hauptakteure interessieren:
NUL
, \
, /
, :
, *
, "
, <
, >
, |
. Außerdem kein Leerzeichen am Anfang oder Ende und kein Punkt am Ende .:
oder/
NUL
oder/
so dass jeder Byte außer NUL
, \
, /
, :
, *
, "
, <
, >
, |
und Sie keine Dateien haben können / Ordner aufrufen .
oder ..
und keine Steuerzeichen (natürlich).
/
. Windows erlaubt keinen Backslash und einige Zeichenfolgen (z CON
. B. ).
:
s im Namen erstellen .
Genauer gesagt wird Mac OS X (jetzt MacOS genannt) /
im Finder :
im Unix-Dateisystem interpretiert.
Dies wurde aus Gründen der Abwärtskompatibilität durchgeführt, als Apple von Classic Mac OS wechselte.
Es ist legitim, a /
in einem Dateinamen im Finder zu verwenden und dieselbe Datei im Terminal zu betrachten, in der a angezeigt wird :
.
Und umgekehrt funktioniert es auch: Sie können a /
in einem Dateinamen nicht mit dem Terminal verwenden, aber a :
ist in Ordnung und wird /
im Finder als a angezeigt.
Einige Anwendungen sind möglicherweise restriktiver und verbieten beide Zeichen, um Verwirrung zu vermeiden, oder weil sie die Logik von früheren Classic Mac OS beibehalten oder die Namenskompatibilität zwischen Plattformen gewährleisten.
Bei Dateinamen für "English locale" funktioniert dies einwandfrei. Ich verwende dies zum Bereinigen hochgeladener Dateinamen. Der Dateiname ist nicht dazu gedacht, mit irgendetwas auf der Festplatte verknüpft zu werden. Er dient zum Herunterladen der Datei, daher gibt es keine Pfadprüfungen.
$file_name = preg_replace('/([^\x20-~]+)|([\\/:?"<>|]+)/g', '_', $client_specified_file_name);
Grundsätzlich werden alle nicht druckbaren und reservierten Zeichen für Windows und andere Betriebssysteme entfernt. Sie können das Muster problemlos erweitern, um andere Gebietsschemas und Funktionen zu unterstützen.
Hier ist der Code zum Bereinigen des Dateinamens in Python.
import unicodedata
def clean_name(name, replace_space_with=None):
"""
Remove invalid file name chars from the specified name
:param name: the file name
:param replace_space_with: if not none replace space with this string
:return: a valid name for Win/Mac/Linux
"""
# ref: https://en.wikipedia.org/wiki/Filename
# ref: /programming/4814040/allowed-characters-in-filename
# No control chars, no: /, \, ?, %, *, :, |, ", <, >
# remove control chars
name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C')
cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name)
if replace_space_with is not None:
return cleaned_name.replace(' ', replace_space_with)
return cleaned_name
:return: a valid name for Win/Mac/Linux
ist nicht unter allen Umständen wahr.