Em uma configuração de gnu
, você pode executar:
myarr=( $(find . -type f -name '[0-9][0-9][0-9]*' -printf '%f\n' | cut -c1-3 | sort -n) )
join -v1 <(seq -w ${myarr[-1]}) <(printf '%s\n' ${myarr[@]})
Como alternativa, com zsh
, você pode tentar algo assim:
myarr=( **/[0-9][0-9][0-9]*(.one_'REPLY=${${REPLY:t}:0:3}'_) )
mynums=( {001..$myarr[-1]} )
print -l ${mynums:|myarr}
Ele extrai os números (os três primeiros dígitos) de cada nome de arquivo, classifica-os e salva o resultado em uma matriz - myarr
. Em seguida, ele define outra matriz - mynums
contendo números de 001
até o valor do último índice (ou seja, o maior número extraído dos nomes de arquivos) e, em seguida, usa expansão do parâmetro para remover os valores em myarr
da expansão de mynums
.