Coloque todos os nomes de arquivos em uma matriz. Você não especificou como está definindo o conjunto de nomes de arquivos nos quais está interessado. Suponho que eles tenham um prefixo e um sufixo comuns. Faça uma matriz com todos os nomes de arquivos.
all=(abc_efg_2015_hanshake_*.csv.gz)
Se todos os números de versão tiverem o mesmo tamanho, o que parece ser o caso em seu exemplo, pois os números têm zeros à esquerda, o arquivo com o maior número de versão é o último elemento da matriz. O número de elementos na matriz é ${#all[@]}
e as matrizes são numeradas de 0, portanto, o último elemento é o número $((${#all[@]}-1))
.
highest=${all[$((${#all[@]}-1))]}
Se os números de versão não tiverem o mesmo comprimento, geralmente é mais conveniente usar sort
para classificá-los. Eu suponho que não há novas linhas nos nomes dos arquivos. Aqui eu isolo o nome do arquivo como a parte antes do primeiro .
, mas somente após o último _
antes do primeiro .
.
highest_version=$(printf '%s\n' abc_efg_2015_hanshake_*.csv.gz |
sed -e 's/\..*//' -e 's/.*_//' |
sort -n | tail -n1)
highest=abc_efg_2015_hanshake_${highest_version}.csv.gz