Sem analisar ls
ou find
output e sem criar nenhum arquivo extra, incrementando apenas o nome do último arquivo (os outros arquivos podem ter nomes).
Para contar arquivos em um diretório:
stat * --printf "%i\n" | wc -l
Para obter o último arquivo:
i=0; j=$(stat * --printf "%i\n" | wc -l); for k in *; do (( (j - ++i) < 1 )) && echo "$k"; done
(( (j - ++i) < 1 ))
testa quantas vezes o loop foi executado e o compara ao número de arquivos no diretório. Ele se baseia no fato de que for
faz um loop sobre os arquivos de uma forma ordenada.
Para obter o nome do próximo arquivo, assumindo o padrão name_{01..99}
i=0
j=$(stat * --printf "%i\n" | wc -l)
for k in *; do
(( (j - ++i) < 1 )) &&
echo "${k%%_*}"_$(printf %02d "$(( ${k##*_} + 1 ))")
done
Para criar o arquivo:
touch $(i=0; j=$(stat * --printf "%i\n" | wc -l); for k in *; do (( (j - ++i) < 1 )) && echo "${k%%_*}"_$(printf %02d "$(( ${k##*_} + 1 ))"); done)
ou
touch $(
i=0
j=$(stat * --printf "%i\n" | wc -l)
for k in *; do
(( (j - ++i) < 1 )) &&
echo "${k%%_*}"_$(printf %02d "$(( ${k##*_} + 1 ))")
done
)