Де я можу знайти список дозволених символів у назви файлів, залежно від операційної системи? (наприклад, в Linux, символ :
дозволений у імені файлів, але не в Windows)
Де я можу знайти список дозволених символів у назви файлів, залежно від операційної системи? (наприклад, в Linux, символ :
дозволений у імені файлів, але не в Windows)
Відповіді:
Ви повинні почати зі сторінки Імена файлу Вікіпедії . У ньому є пристосований розмір таблиці ( Порівняння обмежень імені файлів ), у якому перераховані зарезервовані символи для досить багатьох файлових систем.
У ньому також є безліч іншої інформації про кожну файлову систему, включаючи зарезервовані імена файлів, наприклад, CON
у MS-DOS. Я згадую це лише тому, що мене покусав один раз, коли я скоротив файл включення const.h
до con.h
і провів півгодини, з'ясовуючи, чому компілятор висів.
Повороти з DOS ігнорували розширення для пристроїв , так що con.h
було точно так же , як con
, вхідні консоль ( що означає, звичайно, компілятор чекає мене ввести в заголовки , перш ніж він буде тривати).
POSIX "Fully portable filenames"
запис, у якому перераховано наступне :A–Z a–z 0–9 . _ -
Гаразд, тому дивимось на Порівняння файлових систем, якщо ви дбаєте лише про основні файлові системи файлів:
NUL
, \
, /
, :
, *
, "
, <
, >
, |
. Також немає символу пробілу на початку або в кінці, і немає періоду в кінці .:
або/
NUL
або/
тому будь-який байт , за винятком NUL
, \
, /
, :
, *
, "
, <
, >
, |
і ви не можете мати файли / папки Не кличте .
або ..
і не керуючі символи (звичайно).
/
. Windows не дозволяє зворотній кут нахилу та деякі рядки (наприклад CON
).
:
s у своїх іменах.
Точніше щодо Mac OS X (зараз її називають MacOS) /
у Finder інтерпретується :
у файловій системі Unix.
Це було зроблено для зворотної сумісності, коли Apple перейшла з Classic Mac OS.
Законно використовувати /
ім'я файлу у Finder, дивлячись на той самий файл у терміналі, на якому він відображатиметься з a :
.
І це працює і навпаки: ви не можете використовувати /
ім'я файлу з терміналом, але a :
- це нормально і відображатиметься як /
Finder.
Деякі програми можуть бути більш обмежуючими і забороняють обом символам уникати плутанини або тому, що вони зберігали логіку попередньої класичної Mac OS або для сумісності імен між платформами.
Для імен файлів "англійська мова" це добре працює. Я використовую це для очищення завантажених імен файлів. Ім'я файлу не призначене для зв'язку з чим-небудь на диску, це коли завантажується файл, отже, немає перевірок шляху.
$file_name = preg_replace('/([^\x20-~]+)|([\\/:?"<>|]+)/g', '_', $client_specified_file_name);
В основному він знімає всі недруковані та зарезервовані символи для Windows та інших ОС. Ви можете легко розширити візерунок, щоб підтримувати інші локалі та функції.
Ось код для очищення імені файлу в 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
неправда за будь-яких обставин.