Если вы хотите независимость от ОС, не существует такого понятия, как "расширение имени файла". Некоторые операционные системы могут фактически использовать их, чтобы определить программу, с которой нужно открыть файл, или даже пойти так далеко, что явно ограничивают их (например, FAT с максимум 3 символами).
Но информация также может быть собрана из магических чисел или другой эвристики. Расширения имен файлов - это просто метаданные - где эти данные хранятся, не имеет значения с точки зрения ОС. Например, в * nix файл сценария содержит заголовок в верхней части файла. Shebang сообщает вам, с каким интерпретатором должен запускаться файл, например, /bin/bash
или /usr/bin/env ruby
и т.д.
В мире * nix "базовое имя" - это просто имя файла, в котором удалены все ведущие компоненты (т. Е. Пути, включая последний /
). Итак, базовое имя .txt
будет .txt
. И базовое имя /usr/bin/foo
будет foo
.
Файлы, начинающиеся с точек, называются точечными файлами. Они ни в коем случае не являются особенными, за исключением того, что в Unix-подобных операционных системах они должны быть скрыты от списков каталогов по умолчанию. Их базовым именем является их полное имя, поэтому .bashrc
на самом деле называется .bashrc
. Дотфайл не имеет расширения как такового.
Поэтому, если вы хотите оставаться независимым от ОС, попробуйте взять базовое имя (в смысле слова * nix) и сохранить его. Все остальное всегда будет определено неоднозначно.
Кроме того, вы можете попробовать извлечь расширение, которое будет представлять собой все компоненты базового имени, начиная с последней найденной точки, например, foo.tar.gz
, очевидно, будет файлом .gz
а не .tar.gz
. Только когда он разархивирован с помощью gzip, он становится foo.tar
, который не подвергается воздействию tar. И так далее.