Zulässige Zeichen im Dateinamen

138

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)

Python-Typ
quelle
.NET bietet diese Informationen für Windows.
Leppie
8
@kreker beachten Sie, dass Ihre Frage über Android ist
Congusbongus

Antworten:

106

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. CONunter MS-DOS. Ich erwähne das nur, weil ich einmal davon gebissen wurde, als ich eine Include-Datei von const.hbis verkürzte con.hund 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.hgenau 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).

paxdiablo
quelle
4
Ich finde die Wikipedia-Seite etwas vage und verwirrend, zB "Einige Betriebssysteme verbieten bestimmte Zeichen ...". Ich suche tatsächlich nach einer vollständigen Tabelle, in der alle zulässigen und nicht zulässigen Zeichen aufgelistet sind.
Python-Typ
7
@python, schau nicht auf diese Tabelle, schau auf die große Honkin 'darunter (mit dem Titel "Vergleich der Einschränkungen von Dateinamen"). Das ist inhaltlich nicht so vage.
Paxdiablo
52
Wahrscheinlich müssen Sie sich nur den POSIX "Fully portable filenames"Eintrag ansehen , in dem folgende aufgeführt sind:A–Z a–z 0–9 . _ -
Vladimir Kornea
1
@VladimirKornea danke! Links: pubs.opengroup.org/onlinepubs/9699919799/basedefs/… || pubs.opengroup.org/onlinepubs/9699919799/basedefs/…
Ciro Santilli 6 冠状 病 病. 法轮功
1
@CpILL Es gibt mehr Betriebssysteme als nur Windows, OSX und Linux ... einige haben sehr einfache Dateisysteme.
elegante Würfel
32

OK, sehen Sie sich also den Vergleich von Dateisystemen an, wenn Sie sich nur für die Dateisysteme der Hauptakteure interessieren:

so dass jeder Byte außer NUL, \, /, :, *, ", <, >, |und Sie keine Dateien haben können / Ordner aufrufen .oder ..und keine Steuerzeichen (natürlich).

CpILL
quelle
7
Das ist nicht richtig. Linux erlaubt nicht /. Windows erlaubt keinen Backslash und einige Zeichenfolgen (z CON. B. ).
kgadek
7
Ja, daher sagte ich außer .
CpILL
2
Auf einem Mac (mit HFS +) kann ich Dateien mit :s im Namen erstellen .
Erwaman
Das ist nicht richtig. In dieser Antwort finden Sie weitere Zeichen, die Windows nicht zulässt.
mbomb007
Windows erlaubt auch keine Steuerzeichen (aber der Mac außer NUL)
Thomas Tempelmann
23

Erstellen Sie unter Windows eine Datei und geben Sie ihr ein ungültiges Zeichen wie \im Dateinamen. Als Ergebnis erhalten Sie ein Popup mit allen ungültigen Zeichen in einem Dateinamen.

Geben Sie hier die Bildbeschreibung ein

Devid
quelle
5

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.

Jean Létourneau
quelle
0

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.

TheRealChx101
quelle
-1

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
Du D.
quelle
2
Der Code sucht nicht nach ungültigen (reservierten) Namen und auch nicht nach einem ungültigen Zeichen in replace_space_with. Die Länge des Dateinamens liegt außerhalb des Bereichs. Also, :return: a valid name for Win/Mac/Linuxist nicht unter allen Umständen wahr.
Bestätigen Sie den