Это плохая практика, чтобы имя папки содержало точку (.)? Как насчет имени файла с несколькими точками?

28

Иногда целесообразно, чтобы имя папки содержало точку (.). Например, вы храните данные для эксперимента, проведенного при L = 0,5. Таким образом, папка может быть названа:

experiment_L0.5

Аналогичная проблема может возникнуть для имен файлов. Например:

file_L0.5.txt

Работа в Ubuntu, это плохая практика? Как насчет того, чтобы поделиться этими каталогами с пользователем Windows?

Благодарность!

Хамид
источник
5
Если точка является первым символом, папка будет скрыта. Кроме этого, я не думаю, что это имеет значение.
user3121023 30.01.14

Ответы:

37

Насколько я знаю, нет проблем с именами папок и файлов с одной или несколькими точками.

Обычно Ubuntu не использует точку и три символа (например, .txt) для определения типа файла. Так что это не имеет особого значения в контексте Ubuntu. Это полезно при обмене файлами с Windows. Ubuntu использует магические числа в первых нескольких байтах файла, чтобы определить тип файла. Тем не менее, Наутилус. игнорирует магические числа, если для определения типа файла доступно расширение из трех точек и символов. Этот параметр можно изменить. См. Force nautilus, чтобы игнорировать расширения

В Ubuntu запуск имени файла или папки с точкой, например .experiment_L0.5, делает файл или папку скрытыми. Вы можете переключить отображение скрытых файлов, нажав Ctrl+ Hв Nautilus. В Windows имя файла начинается с. не спрятан Поэтому, если вы перенесете скрытый файл с именем .experiment_L0.5в систему Windows, он будет отчетливо виден.

В Ubuntu имя файла может заканчиваться точкой, так как оно не имеет особого значения в конце. Однако в Windows точка разделяет имя и расширение файла, а имя файла, оканчивающееся точкой, но расширение не допускается. Когда я попытался создать такой файл в Windows, я получил файл только с именем, без точки, без расширения.

Ссылка: вики на имена файлов

Надеюсь это поможет.

user68186
источник
4
Это верно. Если вы делитесь файлами с Windows, вы должны избегать двоеточия :, недопустимого в именах файлов Windows, что создаст проблемы ( и это так ). Смотрите также здесь .
Rmano
Спасибо @Rmano. Я добавил ссылку на вики в своем ответе.
user68186
1
Говоря о совместимости, я думаю, что конечная точка (вроде fname.) не разрешена в Windows.
Rmano
Еще раз спасибо @Rmano. Я провел несколько быстрых тестов и не смог создать файл с именем test.в Windows. Я обновлю свой ответ.
user68186
1
Чтобы добавить к комментарию Rmano - это может быть проблемой в Ubuntu, если у вас есть диск Windows, смонтированный через VirtualBox. Попытка mkdir имени с конечной точкой завершается неудачей с «Ошибка протокола».
17
11

Краткий ответ

  • Windows не допускает следующие символы: <>:"/\|?*( источник )
  • Больше символов, которые не приветствуются: пробел и точка .( источник )
    • Инструменты командной строки сложнее использовать, когда у вас есть пробелы в именах (сложнее, не невозможно)
    • Точки используются в RegEx (например, когда вы хотите использовать grep). Первая точка делает файл скрытым в Linux. В Windows точки используются в расширении файла, которое используется для определения типа файла.
  • Windows , также не позволит имена файлов CON, PRN, AUX, CLOCK$, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, и LPT9. ( источник )
  • Единственные символы, которые не разрешены в файловых системах Unix, которые я знаю, это /null (нулевой байт, \0).
  • Смотрите также: Ограничения файловой системы (я не знаю, с какой Windows вы хотите быть совместимым).

Длинный ответ

Техническая информация: файловая система

Ubuntu использует ext4файловую систему. Файловая система отслеживает, где файлы хранятся в базовом хранилище (диск или SSD или что-то еще), права доступа в форме владельца / группы / других могут считывать / записывать / выполнять, отметки времени, имя.

Файловая система структурирует доступное хранилище. Первый блок называется «суперблок». Этот блок используется для монтирования файловой системы. Насколько я знаю, каждая современная файловая система делит свое пространство на блоки. Я думаю (и я не слишком уверен в этом), что большинство файловых систем также имеют фиксированный размер блока, хотя размер блока можно настроить при создании файловой системы. ext4 (а также ext2 и ext3) используют так называемые "inode" для файлов и каталогов. Эти иноды содержат указатели на другие блоки (которые также могут быть инодами или «блоками данных»). И «первый» индекс файла содержит всю информацию, о которой я упоминал выше.

Еще одна информация - это «тип» файла. «Тип» может быть:

  • обычный файл
  • каталог
  • файл устройства (блочное или символьное устройство)
  • ...

Фактически, вы также можете открывать каталоги с помощью редактора:

vim /home

Поскольку каталог не содержит полный путь, а только имена содержимого, я не вижу причины, по которой файлы не могут содержать /. Я думаю, это может быть удобством. (Кто-нибудь знает, почему /это не разрешено?)

Однако для других файловых систем все иначе. FAT16 и FAT32 использовали так называемую «таблицу размещения файлов». Это означает, что есть таблица, которая содержит все файлы, хранящиеся в вашем файле, в каком «кластере» они начинаются и в каком кластере они заканчиваются как односвязный список.

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

Техническая информация: типы файлов

  • Windows использует расширения файлов для определения типов файлов
  • Linux использует «Волшебные байты» для определения типов файлов. Магические байты являются частью содержимого файла и, следовательно, полностью независимы от имени. Эти байты являются частью спецификации типа файла (см., Например, спецификацию png ). Он также использует расширения имени файла для файлов с такими же магическими байтами, как .txtили .html(оба являются текстовыми файлами).

Связанный

Мартин Тома
источник
Ваше предположение относительно того, как FAT хранит имена файлов, не совсем корректно: en.wikipedia.org/wiki/FAT32#File_Allocation_Table - фактическая «FAT» хранит список кластеров , в то время как каталоги хранят список имен файлов с указателем на первый кластер файл, похожий на то, как вы описываете ext4. :) Кроме того, .txtи .htmlфайлы действительно имеют разные "магические значения" - попробуйте переименовать файл html test.txtи запустить file test.txt. Это не имеет большого отношения к первоначальному вопросу, но все же :)
Сергей
1
Спасибо, я удалил не ту часть о FAT. о магических значениях и file: fileне только использует магические значения для определения типа файла. Каждый действительный HTML-файл представляет собой текстовый файл (в том смысле, что он содержит читаемые символы), но не каждый действительный текстовый файл является действительным HTML-файлом (в том смысле, что он проверяется на соответствие валидаторам W3C). Так что довольно много типов файлов (html, xml, csv, js, php, c, h, cpp, ...) на самом деле являются текстовыми файлами. Только бинарные файлы имеют магические байты, которые находятся на четко определенных позициях. Все файлы, которые я назвал выше, могут иметь произвольный пробел перед содержимым.
Мартин Тома
5

Для полноты, имена, которые состоят только из одной точки .или двух точек, ..являются специальными:

  • . ссылается на текущий каталог
  • .. ссылается на родительский каталог

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

Сергей
источник
Хорошая точка зрения. Это относится как к Windows, так и к Ubuntu.
user68186
1

Это не имеет значения, ни в Linux, ни в Windows.

Распространенной практикой является наличие папки с именем «program.d» - чтобы сохранить конфигурацию и прочее для программы (смотрите в каталоге / etc)

Охад Коэн
источник
0

Имена файлов очень гибки в файловых системах Unix, Linux. Единственное имя файла, которое вы не можете иметь, это нулевой символ или тот, который содержит /в своем имени. Но было бы неплохо избегать использования символов, которые запрещены / зарезервированы в других системах с точки зрения переносимости имен; например, вам не следует использовать какие-либо " * : < > ? \ / |символы (ограниченные NTFS) в имени файла, если вы хотите получить доступ к файлу в системе Windows.

И что касается использования .(точки) в имени файла , я думаю, что это должно быть хорошо, так как он не кажется «зарезервированным» символом ни в одной из систем (за исключением OpenVMS, MS-DOS и Windows, где его использование в имя файла / каталога разрешено, но последнее вхождение будет интерпретироваться как разделитель расширений в VMS, MS-DOS и Windows), как упомянуто в следующей ссылке на Википедию:

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

точный
источник