Renomeando arquivos de forma padronizada

Publicado por Sandro Marcell 18/08/2008

[ Hits: 9.241 ]

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

Rotina de Vacuum para banco de Dados Postgres

Soma valores de uma lista (calculo notas, pontos, etc)

Acesse seus host por vncviewer

Números de Fibonacci

Verificar atualização em URL


  

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