Este pequeno script renomeia os arquivos sem movê-los
n=0; for files in dir1/*.MOD dir2/*.MOD dir3/*.MOD; do printf -v new "${files/MOV*./%02d.}" "$((++n))"; echo mv -v "$files" "$new"; done
ou mais legível:
#!/bin/bash
n=0
for files in dir1/*.MOD dir2/*.MOD dir3/*.MOD; do
printf -v new "${files/MOV*./%02d.}" "$((++n))"
echo mv -v -- "$files" "$new"
done
Substitua dir1 etc pelos caminhos reais para seus diretórios com os arquivos
Remova echo (é só para testar) depois de verificar se isso fornece o que você deseja, para realmente renomear os arquivos.
Isso contém os arquivos 01.MOD , 02.MOD , etc. Se você tiver mais de 99 arquivos, substitua %02d por %03d para obter 001.MOD etc
Explicação:
n=0 Isso apenas define n como 0 , que é onde eu quero que o bash comece a contar.
for files in dir1/*.MOD dir2/*.MOD dir3/*.MOD
Um loop for pode executar comandos iterativamente em cada arquivo por vez. A sintaxe é for [variable] in [these things I want to do something to] ; do [command(s)] $[variable]; done , chamei a variável files e encontrei seus arquivos usando um glob: *.MOD é expandido pelo shell para qualquer arquivo cujo nome termine em .MOD ( * corresponde a qualquer caractere)
printf -v new
printf pode formatar os novos números com uma largura fixa para facilitar a classificação. new é outra variável - este é o novo nome dos arquivos.
"${files/MOV*./%02d.}" "$((++n))"
Referenciando a variável files do anterior e substituindo MOV* (lembre-se * de qualquer caractere) com o resultado do número incremental $((++n)) (isso é n da primeira linha do script, vá por um de cada vez que o loop é executado em um arquivo) formatado usando o código %02d que para printf significa um número decimal de uma largura fixa de dois dígitos 01, 02 etc. O padrão de pesquisa e substituição inclui o . para parar * correspondendo ao nome do arquivo inteiro e, assim, removendo a extensão.
echo mv -v -- "$files" "$new"
Eu adiciono o echo apenas para testes - isso mostra o que será feito em vez de realmente fazê-lo. Remova o eco quando estiver satisfeito com o resultado para realmente executar o comando.
mv renomeia ou move arquivos; sua sintaxe é mv oldname newname . Eu adicionei o -v sinalizador que diz mv para ser "detalhado" e relatar cada ação. Eu adicionei -- apenas para estar seguro - isso diz mv para não aceitar mais opções, o que impede que qualquer nome de arquivo começando com - seja interpretado como opções para o comando - não é necessário no seu caso, mas uma boa prática.
Cada arquivo especificado pela variável files é mv ed para um nome exclusivo criado na variável new . Usamos $ para fazer referência a variáveis e elas devem estar em "aspas duplas" para evitar que o shell faça outras expansões nos nomes de arquivos - isso impede que caracteres especiais ou espaços em nomes de arquivos causem problemas.