Renomeando arquivos de forma padronizada

Publicado por Sandro Marcell 18/08/2008

[ Hits: 9.227 ]

Homepage: http://sanmarcell.wordpress.com

Download rename_csh.sh




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
...

  



Esconder código-fonte

#!/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

Scripts recomendados

Personalizar teclado, alterar função de uma tecla

Altenartiva p/ montar/desmontar disquete em sistemas Debian

firefox-amsn

Agenda telefônica em Shell Script

Informaçoes de rede com shell script


  

Comentários
[1] Comentário enviado por albertguedes em 18/08/2008 - 15:01h

O script é muito útil, e dou uma dica pra você: mimetypes.
Até mais.

[2] Comentário enviado por SMarcell em 28/10/2008 - 03:50h

Pegue a versão melhorada desse script aqui: http://www.slackbr.org/forum/viewtopic.php?f=45&t=15052


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts