Você pode usar o comando prename
para renomear arquivos com base em uma transformação escrito em Perl .
Vamos começar de maneira simples. Para renomear todos os arquivos .jpg
em um diretório, alterando todos os -
para _
, podemos apenas usar o s
operator (também poderíamos usar tr
). O código Perl é executado para transformar cada nome de arquivo.
prename 's!-!_!g' *.jpg
Para alterar a (s) sequência (s) numérica (s) no final para um contador simples, introduzimos uma variável de contador. Eu uso a variável global $a
como um contador (a introdução de variáveis extras é mais complicada). A expressão regular (\.[^/.]*)$
corresponde à extensão do arquivo e $1
no texto substituto representa o que o grupo entre parênteses correspondeu.
prename 's!-!_!g; ++$a; s!_[0-9_]+(\.[^/.]*)$!_$a$1!' *.jpg
Observe que os arquivos são renomeados na ordem dada pelos argumentos do nome do arquivo, ou seja, a ordem de expansão de *.jpg
determina a numeração dos arquivos.
Como alternativa, podemos inicializar o contador explicitamente com um bloco BEGIN
.
prename 'BEGIN {$a = 1;} s!-!_!g; s!_[0-9_]+(\.[^/.]*)$!_$a$1!; ++$a;' *.jpg
Para realizar isso em todos os subdiretórios do diretório atual, chame find
.
find -type d -exec sh -c 'cd "$1" && prename "$0" *.jpg' 's!-!_!g; ++$a; s!_[0-9_]+(\.[^/.]*)$!_$a$1!' {} \;