Renomeando arquivos de forma padronizada
Publicado por Sandro Marcell 18/08/2008
[ Hits: 9.452 ]
Homepage: http://sanmarcell.wordpress.com
Simples script (em C Shell) que renomeia arquivos de forma padronizada.
Exemplo:
$ script.sh -n texto -c 1 -e txt /home/pessoal/textos/*
texto001.txt
texto002.txt
...
texto099.txt
texto100.txt
...
#!/bin/csh -f
#
# Simples script para renomear arquivos de forma padronizada.
#
# Sandro Marcell (sandro_marcell@yahoo.com.br)
# Boa Vista, Roraima - 09/07/2008
#
# Uso: Faca "./script.sh -a" para mais detalhes.
#
# Obs.:
# - As opcoes [-n], [-c] e [-e] devem obrigatoriamente possuir valores;
# - Se a opcao [-c] nao for declarada, o 'contador' iniciara em 1;
# - Os arquivos renomeados serao movidos para o diretorio de trabalho
# corrente;
# - Se no diretorio corrente houver arquivos com o mesmo nome declarado
# na opcao [-n], entao 'backups' serao criados;
# - Ao declarar a opcao [-b] um subdiretorio sera criado no home do usuario
# e os arquivos serao copiados para ele, antes de serem renomeados;
# - E possivel o uso de metacaracteres.
# Caso o usuario interrompa a execucao do script:
onintr _Sair_
# Checando parametros:
if ($#argv == 0) goto _Uso_
# Inicializando variaveis:
set nome = "" ; set ctd = 1 ; set ext = "" ; set bkp = ""
# Checando as opcoes definidas pelo usuario:
while ($#argv != 0)
switch ($argv[1])
# Obtendo ajuda:
case -[aA]:
goto _Uso_
breaksw
# Criando 'backups':
case -[bB]:
set bkp = sim
# Diretorio de destino das copias em 'backup':
set dbkp = $home/${0:t}_bkps
if (! -e $dbkp) mkdir $dbkp
breaksw
# Novo nome dos arquivos:
case -[nN]:
# Descartando a opcao [-n]:
shift
# Se 'nome' possuir espacos, remova-os:
set nome = `echo "$argv[1]" | tr ' ' '_'`
breaksw
# Contador:
case -[cC]:
shift
set ctd = "$argv[1]"
# Somente numeros sao validos para o contador:
echo "$ctd" | grep "[^0-9]"
if ($status == 0) set ctd = 1
breaksw
# Extensao dos arquivos:
case -[eE]:
shift
set ext = ".$argv[1]"
breaksw
# Removendo opcoes invalidas:
case -*:
unset "$argv[1]"
breaksw
# Todo o restante que sobrar, sera considerado arquivo:
default:
break
breaksw
endsw
shift
end
# O usuario especificou algum arquivo?
if ("$argv" == "") then
echo "Erro: especifique os arquivos a serem renomeados."
exit 1
endif
# Informando o destino dos arquivos renomeados:
echo "ATENCAO: Os arquivos renomeados serao movidos para: $cwd"
echo "Renomeando..."
sleep 2
# Loop de execucao
foreach i ($argv)
# Criar 'backups' antes de renomear arquivos?
if ($bkp == sim) then
cp -rf $i --target-directory=$dbkp >& /dev/null
endif
# Testes condicionais:
if (! -e "$i") then
echo "[$i]: Arquivo nao encontrado."
continue
else if (! -w "$i") then
echo "[$i]: Sem permissao para renomear."
continue
else if ( -d "$i") then
echo "Diretorios nao serao renomeados."
continue
endif
# Adicionando zeros ao contador (Ex.: 001 ... 099):
set zeros = `printf "%03d\n" $ctd`
# Concatenando variaveis para formar o novo nome:
set nn = "${nome}${zeros}$ext"
# Renomeando arquivos:
mv --backup=t -T -- "$i" $nn
if ($status == 0) echo "[$i] Renomeado para: $nn"
# Incrementando contador:
@ ctd++
end
exit $status
# Finalizando o script, caso o usuario interrompa sua execucao:
_Sair_:
echo "Execucao abortada\!"
exit(1)
# Como utilizar o script:
_Uso_:
cat << fim
Uso: $0:t -a -b -n [nome] -c [numero] -e [extensao] arquivo1 ...
Onde:
-a[A] - Mostra esta tela de ajuda
-b[B] - Cria backups dos arquivos
-c[C] numero - Contador numerico
-e[E] extensao - Extensao dos arquivos
-n[N] nome - Novo nome dos arquivos
Exemplos:
# Renomear somente arquivos jpg:
$0:t -n imagem -c 1 -e jpg ~/pessoal/*.jpg
# Renomear arquivos com o formato 001.txt ... 010.txt ... 100.txt ..:
$0:t -e txt ~/documentos/*
# Criar 'backups' dos arquivos antes de renomea-los:
$0:t -b -n texto -c 10 -e txt ~/arquivos/*
# Renomear arquivos de diferentes diretorios:
$0:t -n copia -c 1 -e bkp ~/pessoal/* ~/documentos/* ~/arquivos/*
fim
exit 1
# Fim
Assistente de conexão Wireless - KDialog
Ordena os números em ordem ascendente!
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Secure boot, artigo interessante, nada técnico. (4)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (14)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









