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

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

experiment_L0.5

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

file_L0.5.txt

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

Спасибо!

5 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

vim /home

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

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

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

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

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

связанные с

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

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

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

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

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

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

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

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

Другие вопросы по тегам