48

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

Я хотел бы использовать формат даты YYYY-MM-DD , но я не уверен, как отделить его от имени. A - выглядело бы странно, если бы имя начиналось с цифры. Если я использую _ , то он конфликтует с подчеркиванием, представляющим пробел.

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

3 ответа3

41

Резюме:

  • Windows: что-нибудь кроме управляющих символов ASCII и \/:*?"<>|
  • Linux, OS-X: все, кроме нуля или /

На всех платформах лучше избегать непечатных символов, таких как управляющие символы 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 /B
Ab
aB
аB

C> type Ab
b
b

C> type aB
b
b

C> type аB
unicode homograph

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

(Windows 10 NTFS).

38

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

Некоторые потенциальные рекомендации:

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

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

[0-9a-ZA-Z-._]

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

4

Вы могли бы:

  1. заменить текущие подчеркивания на # (символ корректора для пробела)
  2. подчеркивание даты «раздела» из имени файла (или второй дефис - легче набрать)

Alt-1. заглавные буквы могут заменять пробелы: YYMMDD-HHMM-FileName.ext или YYMMDD-HHMM_FileName.ext

Минимальные символы для четкого отображения, которые автоматически сортируются с добавленными нулями за январь-сентябрь (& 1-й-9-й месяц).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .