Подтвердить что ты не робот

У dotfiles есть расширение файла?

У dotfiles, например .htaccess .gitignore и .config, есть расширение файла и нет имени файла, или считается, что у них есть имя файла и нет расширения?


Я пытаюсь реализовать некоторые функции утилиты в PHP, который печально известен тем, что делает что-то неправильно, и я заметил, что функция PHP pathinfo считает, что dotfiles имеет расширение файла и не имеет имени файла, тогда как node path.extname считает dotfiles, чтобы иметь имя файла и расширение.

Я не знаю, существует ли стандарт, или это соответствует предпочтению разработчика.

4b9b3361

Ответ 1

Вы платите свои деньги, и вы берете свой выбор: Да, нет, может быть.

Это зависит от вашего определения "расширение".

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

Помните, что в файлах SCCS использовался префикс s. (в том числе, вы также видели файлы p.), и было много преходящих имен файлов с другими префиксами). У файла SCCS s.something есть расширение или префикс? (С s.source.c он достаточно прост, там префикс, имя и расширение или суффикс, или вы можете игнорировать префикс в качестве специального случая, а имя s.source, а расширение - .c. ) Как насчет исполняемого имени по умолчанию, a.out? Как насчет имени, такого как ..dot; имеет ли он расширение, и если да, то что это такое?

Обратите внимание, что ответ на DOS был более формализован. Там файловая система использовалась для принудительного исполнения (один раз в другое тысячелетие или около того) имена с 8.3, и расширение было ощутимым. Но это ушедшая эпоха по большей части (и мало кто ее пропустил).

Энтони Арнольд и paxdiablo оба отметили, что имена, заканчивающиеся на .tar.gz, существуют, - что расширение на такие файлы?

Если вы относитесь к расширению somecode-8.76.tar.gz как к чему-либо, кроме .gz, вы открываете себя до мешковины. Содержащийся файл somecode-8.76.tar; что само по себе можно утверждать, что имеет расширение .tar. Определение расширения всего gzipped tar файла как .tar.gz вызывает вопрос "почему это не он .76.tar.gz", а также означает, что вам нужно пересмотреть соглашение об именах файлов SCCS. Поглощение части .76 имени в .76.tar.gz или .76.tar в качестве суффикса действительно делает жизненный комплекс действительно. Это действительный вопрос, но ничего, кроме "расширения, является строкой от последней точки до конца имени", действительно чревато или требует интерпретации значения расширения и попадает в другую сложную область, в которой обычно лучше избегать.

Обратите внимание, что Unix на уровне O/S или файловой системы не заботится о расширении файлов. Программы могут решить, что они волнуют расширения, но это зависит от программы. Расширение является индикатором типа файла; это не является окончательным. Вот почему существует программа file для идентификации содержимого файлов. Он просматривает содержимое файла для идентификации содержимого; он не обращает внимания на расширение файла (поэтому ему не нужно решать, что такое расширение).

Ответ 2

Причина, по которой кто-то хочет знать расширение файла, заключается в том, что он хочет знать тип (или некоторые другие метаданные) файла, правильно?

Имя точечного файла не имеет никакого отношения к его типу. Часть после первой точки dotfile - это имя и не имеет расширения. Но dotfile также может иметь расширение (например, .mongorc.js или какой-либо другой скрытый файл в системе UNIX).

Итак, я бы сказал, что путь node path.extname делает это правильно.

Верните расширение пути, начиная с последнего '.' до конца строки в последней части пути. Если нет '.' напоследок часть пути или его первый символ - это ".", затем возвращает пустую строку.


Здесь есть две разные вещи:

  • Существует, с одной стороны, механизм определения некоторых метаданных с помощью расширение имени файла, например, чтобы открыть его с помощью "по умолчанию", приложения в системах без unix-.

  • С другой стороны, Dotfiles - это просто скрытые файлы (с обычным именем и точка впереди, чтобы они не были видны ls), исходящие из unix-like. Итак, .gitignore - это просто файл с именем gitignore и помеченный как скрытый - здесь нет расширения.

Ответ 3

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

Что вам на самом деле нужно для расширения, в данном случае? Файлы, такие как .gitignore, .htaccess и т.д., Сопоставляются с полным именем файла. Не "расширение" (или отсутствие), а полное имя.

Я бы стал аргументом в пользу устранения каких-либо проверок расширений файлов и проверки имени файла. Например, в PHP:

basename ("/path/to/.htaccess");

Ответ 4

Я бы сказал, что они просто скрыты... В Unix/Linux каталог файлов/файлов считается скрытым, если он первый символ ".". (точка), так что это просто первый символ, а не расширение/суффикс.

Кроме того, каталоги также могут быть скрыты, включая ".". и ".." (текущие и родительские) каталоги - и расширение/суффикс обычно не связаны с каталогами. Фактически, многие программы создают такие скрытые каталоги для себя (например .foo), а не только для одного файла (например,.foorc).

Наконец, Unix/Linux никогда не касался суффиксов, так как большинство программ умеют читать "свои" файлы без ретрансляции на одном. Вместо этого Unix часто использует тесты из "magic" -file (/etc/magic) и команды file, чтобы сдерживать тип файла. (Примечательным исключением являются программы сжатия, такие как gzip и bzip2, который заменяет оригинал сжатой сжатой версией).

Я бы добавил, что "rc" -изменение (для "run-command" ) - например,.bashrc,.wgetrc,.zshrc и т.д. можно рассматривать как суффикс/расширение для этих типов файлы - событие, хотя между именем и суффиксом нет точки (некоторые - как .rtorrent.rc - действительно имеют точку).