Які технічні причини існують для використання символів пробілу у назвах файлів?


75

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

Чи є технічні причини того, що все ще часто бачити назви файлів без (відповідних) пробілів? Якщо так, то з яких технічних причин можна уникати пробілів у назви файлів і не перешкоджати цьому, і за яких обставин вони мають значення?

Найбільш очевидна причина, про яку я міг придумати, і чому я зазвичай цього уникаю, - це додаткові лапки, необхідні в командному рядку при роботі з такими файлами. Чи є якісь інші вагомі технічні причини?


Як ви сказали, з ними набагато простіше працювати в командному рядку. Що стосується програмування, то я не впевнений, чи можливо навіть можливо використовувати пробіли у назви файлів.
Елвін Роу

Відповіді:


66

Символи пробілів у назви файлів можуть бути правильним королівським болем у прислівниках у багатьох контекстах командного рядка та в сценаріях, де потрібно бути обережним, щоб переконатися, що вони належним чином уникнуті, тому не схожі на роздільники команд, які ви є біг.

Просто безпечніше їх не мати, навіть якщо ви впевнені, що файл / dir / що-небудь ніколи не буде використовуватися в такому контексті.

Це, і старі звички важко вмирають.


Вони також є правильним королівським болем, з яким потрібно боротися, тоді вам доведеться складати шляхи та змінювати їх. Переконайтесь, що компоненти не цитуються та не призначені для модифікації перед повторним уникненням / повторним цитуванням, особливо якщо шматочки надсилаються до інших бітів коду, якими слід маніпулювати.
afrazier

2
Якщо ви вважаєте, що пробіли погані, спробуйте розібратися з файлами з новими рядками ( '\n') в їх назвах. (Unix-подібні системи насправді дозволяють це; Windows взагалі, або, принаймні, ускладнює.)
Кіт Томпсон,

31

На додаток до інших відповідей про командний рядок та старих звичок є також багато мережевих протоколів, які потребують особливої ​​обережності при роботі з назви файлів, що містять пробіли.

(Якщо ви коли-небудь намагалися завантажити "Product List.pdf" з веб-сайту, і в кінцевому підсумку ви отримали файл, який називається "Продукт", вас це покусало, тому що програміст з іншого боку не знав чи не міг не визначити правила цитування заголовка http Content-Disposition.)


11
+1. HTTP для початку. Пробіли в URL-адресах (для будь-якого протоколу, а не лише HTTP) повинні бути виведені до% 20 або +. Плутанина може виникнути, коли вони не закодовані так, як належить. Для веб-сторінок є візуальна причина уникати обох пробілів і підкреслення ("_"), яке зазвичай використовується для їх заміни - вони можуть виглядати однаково в підкресленому посиланні, тому хтось скопіювавши посилання вручну або прочитавши його комусь, може отримати це неправильно
Девід Спіллетт

5
Однією з найбільш дратівливих речей про простори, які потребують кодування в URL-адресах, є схильність певного програмного забезпечення до кінця зберігати пробіли в кодованому ...
SamB

Це реально? У 2018 році це станеться?
Кріс Кало

@ChrisCalo Ви можете помітити, що ця відповідь була надана в 2009 році, а не в 2018 році. Але так, це все-таки трапляється в 2018 році. Можливо, рідше, зараз більшість розробників-початківців використовують рамки для створення веб-сайтів, а не роблять все з нуля, але все одно питання.
Стобор

28

Багато причин історичні. Це не означає, що вони сьогодні не мають сенсу.

Проблеми з портативністю

При іменуванні файлу, можливо, доведеться також врахувати, як інші (файлові) системи будуть поводитися з цим ім'ям файлу. Символ в імені файлу може бути непоганим для вашої системи, але це може бути проблемою для іншої системи.

Отже, доки існує найменша можливість, що ви можете мати можливість легко отримати доступ до файлу зі старої системи, ви вибрали б лише безпечний символ. Це може включати завантаження старої системи відновлення, яку ви зберігали, або побоювання, що останні версії Windows все ще якимось чином базуються на MS-DOS.

Довжина

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

Кілька інших файлових систем також визначили суворі обмеження по довжині імені файлу. У Вікіпедії є таблиця у статті про порівняння файлової системи для тих, хто хоче деталі.

Зарезервовані персонажі

MS-DOS також визначив пробільний символ як зарезервований символ. Це пов’язано з тим, що пробільний символ використовувався для прокладки в FAT . Крім того, MS-DOS не передбачає системи виходу в оболонку.

Інтерпретація командного рядка

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

Розглянемо різницю між

rm foo bar

і

rm "foo bar"

Згадана вище стаття WikiPedia навіть вказує на неоднозначність, внесену пропуском для належного виходу з команди:

Неоднозначність можна запобігти або заборонити вбудовані пробіли в іменах файлів і каталогів в першу чергу (наприклад, замінивши їх підкресленнями "_"), або, якщо це підтримується інтерпретатором командного рядка та програмами, що приймають ці параметри як аргументи, додаючи ім'я до вбудованих пробілів між символами цитати або використовуючи символ пробігу перед пробілом, як правило, зворотний проріз ('\'). Наприклад

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замість цього.

Це дійсно підпадає під ту ж категорію, що і послідовності введення командного рядка.


5

Іноді пробіли можуть представляти проблему під час роботи в командному рядку, або при використанні старих ОС, або при написанні програм, які будуть компільовані в різних ОС, або коли ... є багато причин, які можуть представляти проблему, і я не ' t дійсно відчуваю, що створити файл як: file-without- blanks.txt або file_without_blanks.txt така проблема . Я віддаю перевагу даску, тому що підкреслення іноді може стати непомітним при роботі, наприклад, з підкресленим шрифтом.

Але здебільшого це питання звички від старості. Я не думаю, що є достатньо професійних причин, щоб відмовитися.


Додаткова примітка, можливо, не пов’язана, але все-таки я викладу її тут. Люди, які називають свої файли пробілами, зазвичай не думають про це; ті, хто часто мало знає, чому добре уникати їх у назви файлів.
І, ми можемо погодитись, немає нічого гіршого, ніж файл із назвами "Шановний пане або пані, я пишу вам цей лист, щоб повідомити вас про yo.doc".

Не просто пробіли - довжина файлу також щось вважає, а IMHO, вона не повинна бути довшою, скажімо, 30 символів. Довгі імена файлів із пробілами всередині також є благом для запису компакт-дисків, DVD-дисків та таких, які потрібно читати під старими ОС, а також між платформами Win та * nix.


2
Користувачі
лінивих слов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.