¿Dotfiles tiene una extensión de archivo?


Do dotfiles, tales como .htaccess .gitignore y .config, tienen una extensión de archivo y ningún nombre de archivo o se consideran que tienen un nombre de archivo y ninguna extensión?


Estoy tratando de implementar algunas funciones de utilidad en PHP, que es conocido por hacer las cosas mal y me di cuenta de que PHP pathinfo función considera dotfiles para tener una extensión de archivo y ningún nombre de archivo, mientras que nodo path.extname considera dotfiles para tener un nombre de archivo y ninguna extensión.

No tengo claro si existe un estándar, o si esto equivale a la preferencia del desarrollador.

Author: zzzzBov, 2015-08-24

4 answers

Pagas tu dinero y eliges: Sí, No, Tal vez.

Se reduce a su definición de 'extensión'.

  • ¿Es "algo después del último punto en el nombre"? Si es así, esos archivos no tienen nombre y son todos extensión.
  • ¿Es "cualquier cosa después de un punto que no sea el primer carácter en el nombre"? Si es así, esos archivos no tienen una extensión.
  • Si utiliza alguna otra definición, entonces la respuesta tendrá que ser ajustada consecuentemente.

Recuerde que los archivos SCCS usaban un prefijo s. (entre otros; también vería archivos p. - y había muchos nombres de archivos transitorios con otros prefijos). ¿Un archivo SCCS s.something tiene una extensión o un prefijo? (Con s.source.c, es razonablemente sencillo; hay un prefijo, un nombre y una extensión o sufijo, o puede ignorar el prefijo como un caso especial y el nombre es s.source y la extensión es .c.) ¿Qué pasa con el nombre ejecutable predeterminado, a.out? Lo acerca de un nombre como ..dot; tiene una extensión, y si es así, ¿qué es?

Tenga en cuenta que la respuesta sobre DOS fue más formalizada. Allí el sistema de archivos utilizado para hacer cumplir (érase otro milenio más o menos) los nombres con 8.3 y la extensión era tangible. Pero esa es una época pasada en su mayor parte (y hay pocos que lo echan de menos).

Anthony Arnold y paxdiablo ambos señalaron que los nombres que terminan con .tar.gz existen - ¿cuál es la extensión en tal los archivos?

Si tratas la extensión de somecode-8.76.tar.gz como cualquier otra cosa que no sea .gz, te estás abriendo a un bag'o'worms. El archivo contenido es somecode-8.76.tar; que en sí puede decirse razonablemente que tiene una extensión de .tar. Definir la extensión de todo el archivo tar comprimido con gzip como .tar.gz plantea la pregunta de "¿por qué no es .76.tar.gz" y también significa que debe volver a visitar la convención de nomenclatura de archivos SCCS. Absorber la porción .76 del nombre en .76.tar.gz o .76.tar como sufijo es haciendo la vida compleja de hecho. Es una pregunta válida, pero cualquier otra cosa que no sea "una extensión es la cadena desde el último punto hasta el final del nombre" está cargada de verdad - o requiere interpretación del significado de la extensión, y se mete en otra área compleja que generalmente es mejor evitar.

Tenga en cuenta que Unix a nivel de O/S o sistema de archivos no se preocupa por la extensión de los archivos. Los programas pueden decidir que se preocupan por las extensiones, pero eso depende del programa. La extensión es un indicador del tipo de archivo; no es definitivo. Es por eso que el programa file existe para identificar el contenido de los archivos. Mira el contenido del archivo para identificar el contenido; no presta atención a la extensión del archivo (por lo que tampoco tiene que decidir cuál es la extensión).

 19
Author: Jonathan Leffler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:31:27

La razón por la que alguien querría saber la extensión de un archivo es que quiere saber el tipo (o algunos otros metadatos) del archivo, ¿verdad?

El nombre de un dotfile no tiene nada que ver con su tipo. La parte después del primer punto del dotfile es su nombre y sin extensión. Pero un archivo dotfile también podría tener una extensión (por ejemplo .mongorc.js o algún otro archivo oculto en un sistema UNIX).

Así que yo diría, la forma en que el nodo path.extname lo está haciendo es el correcto manera.

Devuelve la extensión de la ruta, desde la última '.'al final de la cadena en la última parte del camino. Si no hay".'en el último parte del camino o el primer carácter de la misma es '.', entonces devuelve una cadena vacía.


Aquí hay dos cosas diferentes:

  • Existe, por un lado, el mecanismo de determinar algunos metadatos mediante extensión de nombre de archivo, por ejemplo para abrirlo con un " default" aplicación en non sistemas unix-like.

  • Dotfiles por otro lado son solo archivos ocultos (con un nombre normal y un punto delante, para que no sean visibles a ls) procedentes de sistemas similares a unix. Así que .gitignorees solo un archivo llamadogitignore y marcado oculto - no hay extensión aquí.

 7
Author: Mathias Begert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-24 09:24:21

Siento que tengo que dejar una respuesta abordando el problema real del usuario.

¿Para qué necesitas realmente la extensión, en este caso? Archivos como .gitignore, .htaccess etc. se comparan con el nombre entero de archivo. No la" extensión " (o falta de) sino el nombre completo.

Yo argumentaría el caso para eliminar cualquier comprobación de extensiones de archivo, y la comprobación contra el nombre del archivo. Por ejemplo, en PHP:

basename ("/path/to/.htaccess");
 3
Author: Anthony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-24 03:34:08

Yo diría que están simplemente ocultos... En Unix / Linux, un fichero/directorio se considera oculto si su primer carácter es "."(punto), por lo que es solo el primer carácter - no una extensión/sufijo.

Además, los directorios también se pueden ocultar - incluyendo el "." y ".."(actual y padre) directorios-y extensión / sufijo no es por lo general algo que asociamos con los directorios. De hecho, muchos programas crean tales directorios ocultos por sí mismos (por ejemplo. .foo) más bien que solo un archivo(por ejemplo. .foorc).

Finalmente, Unix/Linux nunca ha estado tan preocupado con los sufijos de todos modos - la mayoría de los programas son capaces de leer "sus" archivos sin retransmitir en uno. En su lugar, Unix a menudo usa pruebas del archivo "magic" (/etc / magic) y la orden file para disuadir el tipo de archivo. (La notable excepción son los programas de compresión como gzip y bzip2, que reemplazan el original con una versión comprimida con sufijo).

Añadiría que la terminación"rc" (para "run-command") - en, por ejemplo .bashrc, .wgetrc, .zshrc y así sucesivamente, podría ser pensado como el sufijo / extensión para este tipo de archivos - evento aunque no hay punto entre el nombre y el sufijo (algunos - como .rtorrent.rc-en realidad tienen un punto).

 3
Author: Baard Kopperud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-24 15:04:28