75

Кто-то, кого я знаю, выразил сегодня раздражение в отношении тех из нас, кто не использует пробелы в наших именах файлов, например, NamingThingsLikeThis.txt - несмотря на то, что большинство современных операционных систем поддерживают пробелы в именах файлов.

Существуют ли технические причины , по которым все еще часто можно увидеть имена файлов без (соответствующих) пробелов? Если да, то каковы эти технические причины того, что пробелы в именах файлов избегаются или не поощряются, и при каких обстоятельствах они актуальны?

Самая очевидная причина, по которой я мог придумать, и почему я обычно избегаю этого, - это дополнительные кавычки, необходимые в командной строке при работе с такими файлами. Есть ли другие важные технические причины?

5 ответов5

64

Пробельные символы в именах файлов могут вызывать настоящую боль в общеизвестных словах во многих контекстах командной строки и в сценариях, где вы должны быть осторожны, чтобы убедиться, что они правильно экранированы, поэтому не выглядите как разделители для команд, которыми вы являетесь Бег.

Просто безопаснее не иметь их там, даже если вы уверены, что файл /dir /what-ever никогда не будет использоваться в таком контексте.

Это, и старые привычки тяжело умирают.

30

В дополнение к другим ответам о командной строке и старых привычках, существует также много сетевых протоколов, которые требуют особого внимания при работе с именами файлов, содержащими пробелы.

(Если вы когда-либо пытались загрузить «Product List.pdf» с веб-сайта и в результате получили файл с именем "Product"), вас это укусило, потому что программист на другом конце не знал или не мог определить правила цитирования для заголовка http Content-Disposition.)

28

Многие причины исторические. Это не значит, что они не имеют смысла сегодня.

Проблемы в мобильности

При именовании файла вам также может потребоваться учитывать, как другие (файловые) системы будут обращаться с этим именем файла. Символ в имени файла может подойти для вашей системы, но это может быть проблемой для другой системы.

Таким образом, до тех пор, пока существует малейшая вероятность того, что вы захотите легко получить доступ к файлу из старой системы, вы выбираете только безопасный символ. Это может включать загрузку старой системы восстановления, которую вы держали, или страх, что последние версии Windows по-прежнему основаны на MS-DOS.

длина

Файловая система может ограничивать длину файла. Это было еще серьезнее в те дни, когда MS-DOS ограничивался 8,3 именами файлов. Таким образом, оставляя пробелы, вы можете добавить в имя более значимые символы.

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

Зарезервированные персонажи

MS-DOS также определил символ пробела как зарезервированный символ. Это связано с тем, что символ пробела использовался для заполнения в FAT. Кроме того, MS-DOS не обеспечивала экранирующую систему в оболочке.

Интерпретация командной строки

Большинство командных строк, которые мне известны, используют символ пробела в качестве разделителя параметров. Если пренебрегать правильным экранированием имени файла, это может привести к ужасным последствиям, поскольку части имени файла могут быть интерпретированы как параметры приложения, которое вы хотите вызвать.

Рассмотрим разницу между

rm foo bar

а также

rm "foo bar"

В статье WikiPedia, указанной выше, даже указывается на двусмысленность, возникшую из-за отсутствия правильного экранирования команды:

Неоднозначность может быть предотвращена либо путем запрета встроенных пробелов в именах файлов и каталогов в первую очередь (например, путем замены их символами подчеркивания '_'), либо, если поддерживается интерпретатором командной строки и программами, принимающими эти параметры как аргументы, заключая в себе имя со встроенными пробелами между символами кавычек или используя escape-символ перед пробелом, обычно с обратной косой чертой ('\'). Например

Long path/Long program name Parameter one Parameter two ...

является неоднозначным (является ли "имя программы" частью имени программы или двумя параметрами?); тем не мение

Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...

и Long\ path/Long\ program\ name Параметр \ один Параметр \ два ...

не являются двусмысленными.

Унифицированные указатели ресурсов (URL)

При попытке описать местоположение файла, используя URL, пробелы необходимо экранировать.

Персонажи могут быть небезопасными по ряду причин. Символ пробела небезопасен, потому что значительные пробелы могут исчезнуть, а незначительные пробелы могут быть введены, когда URL-адреса транскрибируются, набираются или подвергаются обработке программ обработки текста.

Источник: RFC1738

Таким образом, пробел должен быть заменен на %20 вместо этого. Это делает часть имени файла в URL менее читаемой и, таким образом, заставляет людей избегать его.

25

Пробелы кодируются или преобразуются в %20 в именах файлов в Интернете, что может затруднить управление активами сайта.

Наличие Image 1.png и Image%201.png сбивает с толку. Вместо этого проще использовать Image001.png .

Это действительно относится к той же категории, что и escape-последовательности для командной строки.

5

Иногда пробелы могут представлять проблему при работе в командной строке, или при использовании старых ОС, или при написании программ, которые будут скомпилированы на разных ОС, или когда ... Есть много причин, которые могут представлять проблему, и я не На самом деле, мне кажется, что написать файл так: file-without-blanks.txt или file_without_blanks.txt - это такая проблема. Я предпочитаю Dask, потому что подчеркивание может иногда становиться невидимым при работе, например, с подчеркнутым шрифтом.

Но в основном это привычка старости. Что я не чувствую , что есть достаточно про причины отказаться.


Дополнительная заметка, возможно, не связанная, но тем не менее я ее выложу здесь. Люди, которые называют свои файлы пробелами, обычно не думают об этом; те, кто не часто знает, почему их стоит избегать в именах файлов.
И, все мы можем согласиться, нет ничего хуже, чем файл с именами «Дорогой сэр или мадам, я пишу вам это письмо, чтобы сообщить вам о yo.doc».

Не только пробелы - длина файла тоже что-то значит, и ИМХО, она не должна быть длиннее, скажем, 30 символов. Длинные имена файлов с пробелами внутри также являются благословением при записи компакт-дисков, DVD-дисков и т.д., Которые необходимо читать в старых ОС, а также между платформами Win и * nix.

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