Tente:
n=0; for f in *.jpg; do mv "$f" "$((++n)).jpeg.jpg"; done
Ou a mesma coisa se espalha em várias linhas:
n=0
for f in *.jpg
do
mv "$f" "$((++n)).jpeg.jpg"
done
Como funciona
-
n=0Isso inicializa a variável
nn. -
for f in *.jpg; doIsso inicia um loop sobre todos os arquivos no diretório atual cujos nomes terminam com
.jpg. -
mv "$f" "$((++n)).jpeg.jpg"Isso renomeia os arquivos como você deseja. No bash,
$((...))faz aritmética. Aqui, temos que incrementarncada vez que for executado. -
doneIsso sinaliza o final do loop.
Esse código funcionará mesmo se houver arquivos cujos nomes contenham espaços, tabulações, novas linhas ou outros caracteres difíceis.
O pedido
O glob test*.in é expandido em uma lista de arquivos na ordem alfabética . Isso está documentado em man bash :
bash scans each word for the characters *, ?, and [. If one of these characters appears, then the word is regarded as a pattern, and replaced with an alphabetically sorted list of filenames matching the pattern (see Pattern Matching below). [Emphasis added.]
Observe que o significado da classificação alfabética pode depender da sua configuração de localidade.