Допустимые символы в имени файла - PullRequest
112 голосов
/ 27 января 2011

Где я могу найти список разрешенных символов в именах файлов, в зависимости от операционной системы? (например, в Linux символ : разрешен в именах файлов, но не в Windows)

Ответы [ 6 ]

87 голосов
/ 27 января 2011

Вы должны начать со страницы Wikipedia Filename . Он имеет таблицу приличного размера ( Сравнение ограничений имен файлов ), в которой перечислены зарезервированные символы для довольно большого количества файловых систем.

Он также имеет множество другой информации о каждой файловой системе, включая зарезервированные имена файлов, такие как CON в MS-DOS. Я упоминаю об этом только потому, что однажды меня укусило, когда я сократил файл включения с const.h до con.h и потратил полчаса на выяснение причин зависания компилятора.

Оказывается, DOS игнорировал расширения для устройств, так что con.h был точно таким же, как con, консоль ввода (то есть, конечно, компилятор ждал меня типа в файл заголовка, прежде чем он продолжится).

20 голосов
/ 01 сентября 2016

В ОС Windows создайте файл и присвойте ему недопустимый символ, такой как \ в имени файла. В результате вы получите всплывающее окно со всеми недопустимыми символами в имени файла.

enter image description here

17 голосов
/ 12 февраля 2016

ОК, посмотрите на Сравнение файловых систем , если вам нужны только основные проигрыватели файловых систем:

  • Windows (FAT32, NTFS): любой Юникод, кроме NUL, \, /, :, *, ", <, >, |
  • Mac (HFS, HFS +): любой действительный Unicode, кроме : или /
  • Linux (ext [2-4]): любой байт, кроме NUL или /

любой байт кроме NUL, \, /, :, *, ", <, >, |, и вы не можете иметь файлы / папки вызывают . или .. и без управляющих символов (конечно).

2 голосов
/ 03 февраля 2018

Чтобы быть более точным в Mac OS X (теперь называется MacOS), / в Finder интерпретируется как : в файловой системе Unix.

Это было сделано для обратной совместимости, когда Apple перешла с Classic Mac OS.

Допустимо использовать / в имени файла в Finder, глядя на тот же файл в терминале, который будет отображаться с :.

И это работает и наоборот: вы не можете использовать / в имени файла с терминалом, но : в порядке и будет отображаться как / вFinder.

Некоторые приложения могут быть более строгими и запрещать оба символа во избежание путаницы или из-за того, что они сохранили логику из предыдущих Classic Mac OS или для совместимости имен между платформами.

0 голосов
/ 24 октября 2018

Для имен файлов "English locale" это прекрасно работает. Я использую это для дезинфекции загруженных имен файлов. Имя файла не предназначено для связи с чем-либо на диске, оно предназначено для загрузки файла, поэтому проверки пути отсутствуют.

$file_name = preg_replace('/([^\x20-~]+)|([\\/:?"<>|]+)/g', '_', $client_specified_file_name);

В основном он удаляет все непечатаемые и зарезервированные символы для Windows и других ОС. Вы можете легко расширить шаблон для поддержки других локалей и функций.

0 голосов
/ 08 июня 2018

Вот код для очистки имени файла в 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: /2546508/dopustimye-simvoly-v-imeni-faila
    # 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...