Люди говорят, что вы не должны использовать пробелы в именах файлов Unix. Есть ли веские причины не использовать заглавные буквы в именах файлов (т. File_Name.txt
Е. Против file_name.txt
)? Или это просто вопрос личных предпочтений?
Люди говорят, что вы не должны использовать пробелы в именах файлов Unix. Есть ли веские причины не использовать заглавные буквы в именах файлов (т. File_Name.txt
Е. Против file_name.txt
)? Или это просто вопрос личных предпочтений?
Ответы:
Люди говорят, что в именах файлов Unix не должно быть пробелов.
Люди много чего говорят. Есть некоторые инструменты, которые могут испортить, но, надеюсь, их на данный момент мало, потому что места - это вирус, распространяемый гигантскими частными корпорациями, занимающимися запатентованными ОС, и теперь его невозможно избежать.
Пробелы затрудняют указание имен файлов в командной строке и т. Д. Вот и все. Единственные категорически запрещенные символы в системах * nix - это NUL (не волнуйтесь, это не на вашей клавиатуре или чьей-либо еще), и /
, поскольку это разделитель пути. +1 Кроме этого ничего не выходит. Отдельные элементы пути (имена файлов) ограничены 255 байтами (возможное осложнение, если вы используете расширенные наборы символов) и полными путями до 4 КиБ.
Или это просто вопрос личных предпочтений
Я бы сказал, что это так. Большинство DE, кажется, создать убивание капитализированных каталогов в вашем $HOME
( Downloads
, Desktop
, Documents
- D
очень популярен), так что нет ничего странно об этом. Есть также очень распространенные традиционные файлы с заглавными буквами, такие как .Xclients
и .Xauthority
.
Значение заглавных букв в начале состоит в том, что при лексикографическом перечислении они будут предшествовать строчным буквам - по крайней мере, с множеством инструментов и в зависимости от языка.
Я фанат дела о верблюдах (он же camelCase) и использую его с именами файлов, например, /home/goldilocks/blueSuedeShoes
- неважно, что там. Определенно, это вопрос личных предпочтений, но он еще не принес мне горя.
Файлы классов Java, как правило, содержат заглавные буквы, потому что имена классов Java это делают. И, конечно, давайте не будем забывать NetworkManager
, даже если некоторые из нас предпочтут.
1. Существует гораздо более ограниченный, рекомендованный POSIX «Переносимый набор символов имени файла» , который не содержит пробела, но включает верхний регистр! POSIX также определяет более общее ограничение в отношении «символа косой черты и нулевого байта» в другом месте того же документа . Это отражает или отражается в давних традициях .
README
с и Makefile
с и так далее.
Одна из причин избегать использования заглавных букв в именах файлов заключается в том, что порядок сортировки в Unix чувствителен к регистру, поэтому файлы, начинающиеся с заглавной буквы, будут отображаться не по порядку. По этой причине Makefile
имя обычно пишется с заглавной буквы M
- это один из файлов, который вы хотите увидеть первым, без прокрутки / пропуска a-l
.
Тем не менее, вы можете сделать гораздо хуже с точки зрения имен файлов:
-
может вызвать проблемы, так как многие программы увидят его как параметр командной строки вместо имени файла (например rm -r
, не удалит файл с именем -r
)..
будет начинаться с символа, то оно будет скрыто от многих утилит и оболочки (например rm *
, файлы не будут удалены .config
)|<>*?
и даже непечатных символов, newline
технически возможно, но может нарушать работу сценариев / программ, аналогичных пробелу. Разница в том, что символ пробела часто используется, поэтому программисты, как правило, проверяют свои программы на него, в то время как менее популярные символы часто остаются непроверенными.rm *
не удалит файлы, как .config
?
Makefile
и README
являются прекрасными примерами этого. Также обратите внимание, что этот эффект незначителен, если буква не является первой буквой в имени, поэтому это не имеет большого значения, если вы используете camelCase. Конечно, вы можете быть удивлены, увидев anOctagon
раньше angle
, но, по крайней мере, они будут вместе в списке.
Если вы собираетесь взаимодействовать со средой Windows, вам следует избегать заглавных букв, потому что Windows будет все в нижнем регистре. Это чаще проблема, идущая в другую сторону; ссылка на Page_2.html
найдет page_2.html
в Windows, но не удастся в Unix.
NUL
и /
запрещено.
cat > Foo
файл будет перезаписан foo
. Такое поведение может быть неожиданными и запутанным , если вы привыкли дело , сохраняющие и чувствительны к регистру файловых систем , такие как доб *.
\0
и /
с учетом регистра). По крайней мере, так я это помню. Но я согласен, что это отчасти беспорядок. Есть дополнительные ограничения в…
Одна из причин, по которой следует избегать заглавных букв, заключается в том, что при bash
заполнении табуляции учитывается регистр (по крайней мере, по умолчанию) - это все равно сбивает меня с толку каждый раз, когда я оказываюсь перед bash
конфигурацией по умолчанию. Конечно, существуют и другие популярные оболочки, но это в сочетании с тем фактом, что bash
во многих ОС используется оболочка входа по умолчанию, означает, что по умолчанию это часто завершается с учетом регистра. Использование строчных имен файлов упрощает ситуацию.
echo set completion-ignore-case On >> ~/.inputrc
может помочь немного, по крайней мере, в вашей собственной системе.
Foo
и последующим типом cat f
(Tab), произойдет сбой. Но то же самое происходит, если вы печатаете cat foo
, cat Foobar
или cat Fu
- тот факт, что у вас будут проблемы с доступом к файлу, имя которого вы не помните правильно, на самом деле не имеет ничего общего с автозаполнением.
Так как NL_Derek открыл эту банку с червями, но не сформулировал ее правильно, я скажу следующее:
Можно использовать заглавные буквы, но вы должны избегать создания файлов (в одном каталоге), которые отличаются только регистром , например, File_Name.txt
и file_name.txt
, потому что
FILENA~1.TXT
и FILENA~2.TXT
- введите, dir /x
чтобы увидеть, какое короткое имя (если есть) идет с каким длинным именем.)cmd1 > foo
cmd2 > Foo
cmd2
Помимо технических причин, у меня есть практический аспект к этому. Придерживаясь строчных букв, вы сможете упростить поиск, если только вы не любите использовать grep -i или locate -i. Иногда, даже camelCase может сбить с толку, если нужно использовать строку слов в подобном случае, как в storageNYCDCPrimary. Поэтому я считаю, что лучше придерживаться строчных букв и перетаскивать их подчеркиванием или дефисом для удобства чтения, например storage_nyc_dc_primary.
storageNycDcPrimary
и StorageNycDcPrimary
оба странны для чтения.
Я действительно считаю , что это лучшая практика , чтобы избежать использования капители и пробелы в именах файлов.
Некоторые скажут, что они не согласны, но это вопрос или то, что я называю религиозными убеждениями : трудно обсуждать и соглашаться. Те, кто не согласен, говорят, что большинство инструментов теперь исправлены, чтобы быть дружественными к столицам и пространствам: они правы, но это не вопрос.
Правильный вопрос - сколько вам нужно использовать заглавные буквы и пробелы в именах файлов. На этот вопрос, кроме случаев, когда я занимаюсь программированием на Java, ответ в основном все время: мне не нужны заглавные буквы и пробелы в именах файлов . Все пробелы я заменяю подчеркиванием ( _
) или знаком минус ( -
), и из-за этого я не использую случай верблюда (он же camelCase) вопреки какой-либо другой религии.
Многие люди называли меня ерундой за то, что я делал и учил этому - некоторые из них все еще делают - некоторые из них споткнулись о инструмент, который не был дружественным по отношению к капиталу и космосу, и пришли ко мне, сказав, что я был прав и что они должны были слушать меня. Делайте что хотите , и если вы используете заглавные буквы и пробелы в имени файла, я надеюсь, что вы никогда не запутаетесь в плохо написанном инструменте. Тем не менее, если вы отключитесь от такого инструмента, надеюсь, вам будет легко его исправить, и он не будет стоить вашему бизнесу и / или вам много денег и / или времени. Но если это в конечном итоге приведет к плохим последствиям, вы помните, что некоторые в прошлом говорили вам, что использование заглавных букв и пробелов в именах файлов - плохая практика.
И последнее: если вы хотите избежать всех проблем , не используйте специальные символы в именах файлов (только строчные буквы, цифры, подчеркивание и минусы [1]). Этот список нежелательных символов также включает в себя все не ascii символы (да, французы и другие неанглийские люди - и я один из них - ни один из них: à, â, ä, ç, é, ..., ö, æ, œ ...). Это также распространяется на многие другие вещи, включая логин и пароль . Я позволю вам угадать, что произойдет, когда вы введете кавычку или двойную кавычку ( '
или "
) в логин или пароль, которые обрабатываются скриптом bash, не написанным подтвержденным сисадмином ....
[1]: может быть , мы могли бы расширить , что ~
, @
, #
и некоторые другие, но это ищет неприятности (и да , я знаю о EMACS файлов ...).