Isso seria mais fácil em zsh, onde você pode usar
- o qualificador de glob
On
para classificar as correspondências em ordem decrescente (e n
para usar a ordem numérica, caso os nomes dos arquivos não tenham zeros à esquerda na mesma largura);
- o sinalizador de expansão do parâmetro
(l:WIDTH::FILLER:)
para preencher todos os números até o mesma largura (a largura do maior número).
break=$1 # the position at which you want to insert a file
setopt extended_glob
width=
for x in [0-9]*(nOn); do
n=${x%%[^0-9]*}
if ((n < break)); then break; fi
((++n))
[[ -n $width ]] || width=${#n}
mv $x ${(l:$width::0:)n}${x##${x%%[^0-9]*}}
done
No bash, aqui está um script que assume que os arquivos são preenchidos com uma largura fixa (caso contrário, o script não renomeia os arquivos corretos) e os blocos para uma largura fixa (que deve ser especificada).
break=$1 # the position at which you want to insert a file
width=9999 # the number of digits to pad numbers to
files=([0-9]*)
for ((i=#((${#files}-1)); i>=0; --i)); do
n=${x%%[^0-9]*}
x=${files[$i]}
if ((n < break)); then continue; fi
n=$((n + 1 + width + 1)); n=${n#1}
mv -- "${files[$i]}" "$n${x##${x%%[^0-9]*}}"
done