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=0
Isso inicializa a variável
n
n. -
for f in *.jpg; do
Isso 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 incrementarn
cada vez que for executado. -
done
Isso 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.