Какие символы безопасны в кроссплатформенных именах файлов для Linux, Windows и OS-X

Какие символы безопасны в кроссплатформенных именах файлов для Linux, Windows и OS-X
На чтение
10 мин.
Просмотров
22
Дата обновления
11.11.2024

В настоящее время я использую имя YYMMDD-NAME + PAGE для большинства своих файлов. В NAME пробелы преобразованы в подчеркивания.

Я хотел бы использовать формат даты ГГГГ-ММ-ДД , но Я не знаю, как отделить это от имени. - выглядел бы странно, если бы имя начиналось с числа. Если я использую _ , тогда он конфликтует с подчеркиванием, представляющим пробел.

Какие символы в именах файлов достаточно безопасны, которые здесь будут работать? Я использую Linux, но могу делиться файлами с другими людьми (Windows 7, Mac OS X).


Резюме:

  • Windows: все, кроме управляющих символов ASCII и /:*?"|
  • Linux, OS- X: все, кроме null или /

На всех платформах лучше избегать непечатаемых символов, таких как управляющие символы ASCII.

Windows

В Windows проводник Windows не позволяет использовать управляющие символы или /: *? " | Вы можете использовать пробелы. Если вы используете пробелы, вам часто придется заключать имя файла в кавычки при использовании из командной строки (но, насколько мне известно, приложения с графическим интерфейсом не затрагиваются). Файловая система Windows, такая как NTFS, по-видимому, хранит кодировку с именем файла, но UTF-16 является стандартным.

Некоторые части Windows чувствительны к регистру, другие — без учета регистра. В файловой системе Windows NTFS легко создать отдельные имена файлов, такие как «Ab» и «ab». Эти имена относятся к отдельным файлам, которые содержат отдельный отдельный контент. Однако, хотя в командной строке Windows оба файла будут перечислены с помощью dir , вы не сможете легко получить доступ к одному из них или управлять им с помощью таких команд, как type . См. Ниже.

Linux, OS-X

Только в Linux и OS-X / из печатного набора ASCII, я считаю, запрещен. Некоторые символы (метасимволы оболочки, такие как * ?! ) вызовут проблемы в командных строках и потребуют, чтобы имя файла было соответствующим образом заключено в кавычки или экранировано.

Файловые системы Linux, такие как ext2, ext3 не зависят от набора символов (я думаю, они просто рассматривают его более или менее как поток байтов — запрещены только нули и /). Это означает, что вы можете хранить имена файлов в кодировке UTF-8. Я считаю, что оболочка или другое приложение должны знать, какую кодировку использовать для правильного преобразования имени файла для отображения или обработки.

Заключение

Таким образом, вы, вероятно, могли бы безопасно использовать что-то вроде (если бы это было не так сложно набрать)


Чувствительность к регистру в Windows

  C> dir/BAbaBаBC> type AbbbC> type aBbbC> type аBunicode homograph  

Обратите внимание, что мы не можем ввести содержимое второго файла, команда Windows type просто возвращает вместо этого содержимое Ab. Третий файл также будет отличаться от aB в Linux.

(Windows 10 NTFS).


Хотя ответ RedGrittyBrick технически верен, безопасность — не единственная проблема: также важно удобство использования. Я думаю, что лучше спросить, «какие символы лучше использовать в имени файла».

Некоторые возможные рекомендации:

  • [0-9a-zA-Z_] — буквенно-цифровые символы и подчеркивание можно использовать всегда.
  • /: *? " | и нулевой байт проблематичны по крайней мере в одной системе, и их следует всегда избегать.
  • Пробелы используются в качестве разделителей аргументов во многих системах, поэтому по возможности следует избегать имен файлов с пробелами. Другие пробелы (например, табуляции) тем более.
  • Точки с запятой (;) используются для разделения команд во многих системах. Точки с запятой и запятые (,) используются для разделения аргументов командной строки в (некоторые версии?) командной строки Windows.
  • [] () ^ #% &! @: + = {} '~ и [`] все имеют особое значение во многих оболочках, и их раздражает работа, и т. следует избегать. Они также имеют тенденцию выглядеть ужасно в URL-адресах.
  • Начальные символы , которых следует избегать:
    • Многие программы командной строки используют дефис [-] для обозначения специальных аргументов.
    • * системы на базе nix используют точку [.] в качестве ведущего символа для скрытых файлов и каталогов.
  • Все, что не входит в набор ASCII , может вызвать проблемы в старых или более простых системах (например, в некоторых встроенные системы), и их следует использовать с осторожностью.

Это в основном оставляет вас с:

которые всегда безопасно и не раздражает в использовании (если вы начинаете имя файла с буквенно-цифрового)

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий