Se você quiser agnóstico do SO, não existe uma "extensão de nome de arquivo". Certos sistemas operacionais podem, na verdade, usá-los para determinar o programa para abrir um arquivo, ou até mesmo ir tão longe quanto explicitamente restringi-los (pense em FAT com 3 caracteres no máximo).
Mas as informações também podem ser coletadas de números mágicos ou outras heurísticas. Extensões de nome de arquivo são apenas metadados - onde os dados são armazenados não importam do ponto de vista do sistema operacional. Por exemplo, no * nix, um arquivo de script inclui um shebang na parte superior do arquivo. O shebang informa com qual interpretador o arquivo deve ser executado, por exemplo, /bin/bash
ou /usr/bin/env ruby
, etc.
No mundo * nix, um "nome-base" é apenas o nome do arquivo com quaisquer componentes principais (ou seja, caminhos incluindo o último /
) removidos. Assim, o nome de base de .txt
seria .txt
. E o nome de base de /usr/bin/foo
seria foo
.
Os arquivos que começam com pontos são chamados de dotfiles . Eles não são de modo algum especiais além dos sistemas operacionais do tipo Unix que devem estar ocultos das listagens de diretório por padrão. Seu nome de base é seu nome completo, portanto, .bashrc
é realmente chamado de .bashrc
. Um dotfile não possui uma extensão, por si só.
Além disso, você pode tentar extrair uma extensão, que seriam os componentes de nome de base completos a partir do último ponto encontrado, por exemplo, foo.tar.gz
seria obviamente um arquivo .gz
e não um .tar.gz
. Somente quando descompactado com o gzip, ele se torna um foo.tar
, que seria descompactado pelo tar. E assim por diante.