Eu estou tentando definir uma variável em um script sh para os últimos 3 caracteres do nome base de um arquivo (por nome base, quero dizer, sem o caminho e sem o sufixo). Consegui fazer isso, mas, por pura curiosidade, estou me perguntando se existe um comando mais curto e único que eu possa usar. Originalmente eu tinha uma linha awk
, mas era bastante longa. Atualmente, tenho esse script de duas linhas (assumindo que um nome de arquivo completo esteja $1
):
filebase=`basename "$1"`
lastpart=`echo -n ${filebase%.*} | tail -c3`
Por exemplo, "/path/to/somefile.txt" termina com "ile" em $lastpart
.
Posso de alguma forma combinar basename
o bit para separar o sufixo em um único comando e existe uma maneira de enviá-lo paratail
(ou qualquer outra coisa que eu possa usar) sem usar um pipe? O sufixo é desconhecido, portanto não posso basear como parâmetro basename
.
O objetivo principal não é tanto o mais curto possível, mas o mais legível possível. O contexto real de tudo isso é essa pergunta no Superusuário , onde estou tentando encontrar uma resposta razoavelmente simples.
two
funcionaria; a extensão disso seria .three
eu acho.
file.one.two.three
? Você querile
outwo
?