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

75

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

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

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

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

Ответы:

66

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

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

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

Дэвид Спиллетт
источник
Они - также правильная королевская боль, с которой нужно иметь дело, тогда вы должны составить пути и изменить их. Перед повторным экранированием / повторным цитированием убедитесь, что компоненты не заключены в кавычки и не экранированы для модификации, особенно если части отправляются в другие биты кода для манипуляции.
afrazier
2
Если вы думаете, что пробелы плохие, попробуйте работать с файлами с символами новой строки ( '\n') в их именах. (Unix-подобные системы на самом деле позволяют это; Windows вообще или, по крайней мере, затрудняет это.)
Кит Томпсон
31

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

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

Stobor
источник
11
+1. HTTP для начала. Пробелы в URL (для любого протокола, а не только HTTP) должны быть экранированы до% 20 или +. Путаница может возникнуть, когда они не закодированы так, как должно быть. Для веб-страниц есть визуальная причина избегать как пробелов, так и подчеркивания («_»), обычно используемого для их замены - они могут выглядеть одинаково в подчеркнутой ссылке, поэтому кто-то, скопировав ссылку вручную или прочитав ее, может получить это неправильно.
Дэвид Спиллетт
5
Одной из самых раздражающих вещей в отношении пробелов, которые необходимо кодировать в URL-адресах, является склонность определенного программного обеспечения в конечном итоге сохранять закодированные пробелы ...
SamB
Это правда? В 2018 году это случится?
Крис Кало
@ChrisCalo Вы можете заметить, что этот ответ был дан в 2009 году, а не в 2018. Но, да, это все еще происходит в 2018 году. Возможно, реже, теперь, когда большинство начинающих разработчиков используют фреймворки для создания сайтов, а не делают все с нуля, но все же вопрос.
Stobor
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 менее читабельным и, таким образом, заставляет людей избегать его в первую очередь.

Der Hochstapler
источник
25

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

Имея Image 1.pngи Image%201.pngсбивает с толку. Это проще в использовании Image001.png.

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

user7012
источник
5

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

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


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

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

ладья
источник
2
Пользователи Lazy Word ...
SamB