Uma palavra que começa com um traço é geralmente considerada como uma opção. Quando você executa ls *
, o comando ls
recebe ls 001.png -002.png ...
e vê -002.png
como um conjunto de opções que não entende. O mesmo para muitos comandos como cp
, mv
, ...
Solução # 1: prefixar os arquivos com o caminho deles. Funcionará em todos os casos.
ls ./*
Solução # 2: muitos comandos, especialmente no mundo GNU, aceitam um duplo traço como parâmetro, indicando que o que segue não são opções
ls -- *
No entanto, os traços iniciais não afetarão você for
loop.
Quanto ao "valor muito grande para a base", é devido a -008
ser considerado como um número octal porque começa com um 0. No entanto, 8 não é um dígito octal válido. Uma solução rápida seria usar bc
:
printf -v basename_new %04d "$(bc <<< "${basename} + 10")"
Você emite com if
é causado por um basename_new
vazio e desaparecerá com a correção acima.