O shell, bash por exemplo, tem muitos recursos de . Um deles permite remover tudo até um determinado padrão:
${VAR##GLOB}
A sintaxe acima remove tudo da variável $VAR
até a primeira correspondência do glob GLOB
. Então, para imprimir a extensão de um arquivo sem o seu nome, você poderia fazer:
$ file="file.txt"
$ echo ${file##*.}
txt
Observe que isso também pode lidar com mais de uma "extensão":
$ file="file.new.txt"
$ echo ${file##*.}
txt
Se você não quiser, use um #
, que removerá a correspondência mais curta em vez da mais longa:
$ echo ${file#*.}
new.txt
Agora, para executar isso em todos os arquivos em um diretório, você poderia fazer:
$ ls
file.avi file.pdf file.png file.txt
$ for file in *; do echo "$file : ${file##*.}"; done
file.avi : avi
file.pdf : pdf
file.png : png
file.txt : txt
E, por questões de integridade, você também pode obter o nome do arquivo sem sua extensão usando ${file%.*}
:
$ for file in *; do echo "$file : ${file##*.} : ${file%.*}"; done
file.avi : avi : file
file.pdf : pdf : file
file.png : png : file
file.txt : txt : file