Renomeando arquivos de forma padronizada
Publicado por Sandro Marcell 18/08/2008
[ Hits: 9.527 ]
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
Configuração Teclado ABNT2 (Gnome3)
Sistema de ajuda on-line com interface grafica
Descobrindo MAC, IP, Broadcast e Máscara da placa de rede
System Software 2.0 - Instale e remova repositórios e programas de forma simples
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
O que houve com slackware ??? (12)
Alterar conteúdo de dica [RESOLVIDO] (3)
Vou destruir sua infância:) (5)









