Como eu renomeio muitos arquivos de qualquer coisa para nomes de arquivos sequenciais? [duplicado]

3

Eu tenho um diretório com 8.000 imagens. Estes têm uma variedade de nomes de arquivos e são do tipo jpeg ou png.

Quero renomeá-los para:

pic00001.png
pic00002.jpg

Eu não me importo se eu acabar fazendo os pngs em uma corrida e os jpegs em outra, terminando com dois conjuntos ligeiramente sobrepostos - pic00001.png, pic00002.png e pic00001.jpeg, pic00002.jpeg

As perguntas atuais sobre o SE abrangem a renomeação em massa se você usar o nome de arquivo existente e adicionar ou remover informações estáticas. Eu não estou fazendo isso. Estou substituindo o nome do arquivo inteiro por um número incremental.

    
por DanBeale 30.05.2015 / 23:10

1 resposta

3

Você poderia fazer isso com um loop de shell como:

for f in *.jpeg *.png
do  printf "mv '%s' pic%05d.%s \n" "$f" $((++c)) "${f##*.}"
done | sh

Este programa cria uma única sequência com uma execução de um número de série e mantém a extensão do arquivo original.

Nota: A técnica para criar os comandos ou sequências de comando e canalizar o resultado em um shell é um padrão de codificação padrão. Você pode executar o programa primeiro sem o pipe final em sh para inspecionar se os comandos criados se encaixam e se tudo parece bem acrescentar o pipe final. (Ao contrário de adicionar temporariamente um echo (como visto com frequência), o método pipe-into-shell cria uma saída consistente .

Mas observe (como Gilles apurou) que no caso dado, um nome de arquivo contendo aspas simples criará para o respectivo nome de arquivo um resultado incorreto. Se você não precisa do recurso de pré-inspeção, você pode executar diretamente os comandos, como em:

for f in *.jpeg *.png
do
  ((++c))
  new_f=$( printf "pic%05d.%s" $c "${f##*.}" )
  mv "${f}" "${new_f}"
done

(Para o paranóico: Claro que sempre pode haver situações em que essas soluções também não funcionem como pretendido; por exemplo, se alguns dos arquivos existentes já estiverem em conformidade com o formato de nome de arquivo de destino; nesse caso, por exemplo, crie / mova os arquivos para um novo diretório temporário para evitar a corrupção dos respectivos arquivos.)

    
por 30.05.2015 / 23:17