В настоящее время я использую YYMMDD-NAME+PAGE
имя для большинства моих файлов. NAME
имеет пробелы, преобразованные в подчеркивания.
Я хотел бы использовать YYYY-MM-DD
формат даты, но я не уверен, как отделить его от имени. А -
выглядело бы странно, если бы имя начиналось с цифры. Если я использую _
, то это конфликтует с подчеркиванием, представляющим пробел.
Какие символы достаточно безопасны в именах файлов, которые будут работать здесь? Я использую Linux, но я могу делиться файлами с другими людьми (Windows 7, Mac 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
Обратите внимание, что мы не можем набрать содержимое второго файла, команда Windows
type
просто возвращает содержимое Ab. Третий файл также будет отличаться от aB в Linux.(Windows 10 NTFS).
источник
Хотя ответ RedGrittyBrick технически верен, безопасность - не единственная проблема: удобство использования также важно. Я думаю, что лучший вопрос - «какие символы хорошо использовать в имени файла».
Некоторые потенциальные рекомендации:
\/:*?"<>|
и нулевой байт проблематичен как минимум в одной системе, и его всегда следует избегать.[]()^ #%&!@:+={}'~
и [`] у всех есть особые значения во многих оболочках, и они раздражают, чтобы обходить их, и поэтому их следует избегать. Они также имеют тенденцию выглядеть ужасно в URL .Это в основном оставляет вас с:
[0-9a-Za-Z -._]
которые всегда безопасны и не раздражают в использовании (при условии, что имя файла начинается с буквенно-цифрового) :)
источник
[]
) являются частью регулярных выражений и также имеют особое значение в оболочке. Но с ними не так уж плохо работать, за исключением некоторых злых угловых дел.()
самом деле.[]()^;
, так что я думаю, что правильным ответом на самом деле может быть[0-9a-zA-Z.,_-]
запятая, которая также может быть исключена только потому, что это странно видеть в имени файла, хотя я не могу вспомнить фактический случай, когда это вызвало бы проблемы.echo whereami > a,b,c
в окне командной строки Win10.Вы могли бы:
#
(символ корректора для пробела)Alt-1. начальные заглавные буквы могут заменить пробелы:
YYMMDD-HHMM-FileName.ext
илиYYMMDD-HHMM_FileName.ext
Минимальные символы для четкого отображения, которые автоматически сортируются с добавленными нулями за январь-сентябрь (& 1-й-9-й месяц).
источник