Script para renomear arquivos

Publicado por Sandro Marcell 28/01/2008

[ Hits: 19.183 ]

Homepage: http://sanmarcell.wordpress.com

Download rename.sh




Precisava de um programa que renomeasse arquivos em lote. Por isso escrevi este simples script que me quebrou um galhão. Ele renomeia os arquivos seguindo o padrão:

arq_1.txt, arq_2.txt, arq_3.txt ...

Espero que seja útil para mais alguém.

Falou!!!

  



Esconder código-fonte

#!/bin/bash --norc 
#
# Simples script para renomear arquivos.
#
# Sandro Marcell (sandro_marcell@yahoo.com.br)
# Boa Vista, Roraima - 31/06/2007 (Atualizado em 07/12/2007)
#
# Uso: nome_script -a [-n nome] [-c número] [-e extensão] arquivo1 ...
# Onde:
# -a[A]       = Mostra esta tela de ajuda.
# -n[N] nome     = Novo nome dos arquivos.
# -c[C] número   = Número em que o contador será iniciado.
# -e[E] extensão = Extensão dos arquivos.
#
# Obs.:
# - Caso as opções [-n] e [-e] não sejam declaradas, os arquivos serão
# renomeados com base na variável 'contador'.
# - Se a opção [-c] não for declarada, o 'contador' iniciará em 1.
# - É possível o uso do metacaractere (*)
# - Os arquivos renomeados serão movidos para o diretório de trabalho
# corrente.
# - Se no diretório corrente houver arquivos com o mesmo nome declarado
# na opção [-n], então cópias em 'backup' serão criadas.
# - Por segurança, faça cópias em 'backup' dos arquivos a serem renomeados.

# Realçando saída do comando 'echo':
Echo() { echo -e "\e[1m$*\e[m"; }

# Caso o usuário interrompa a execução do script:
trap "break ; exit" 1 2 3 15

# Utilizando o script:
Uso() {
Echo "Uso: ${0##*/} -a [-n nome] [-c número] [-e extensão] arquivo1 ...
Onde:
-a[A]          = Mostra esta tela de ajuda.
-n[N] nome     = Novo nome dos arquivos.
-c[C] número   = Número em que o contador será iniciado.
-e[E] extensão = Extensão dos arquivos."; }

# Checando parâmetros:
[[ $BASH_ARGC ]] || { Echo "Faça: '${0##*/} -a' para obter ajuda."; exit 1; }

# Inicializando variáveis:
NOME= ; CTD=1 ; EXT=

# Checando as opções definidas pelo usuário:
while getopts "aAn:N:c:C:e:E:" OPC 2>/dev/null
do
   case "$OPC" in
      # Variável 'nome': 
      [nN]) NOME="$OPTARG" ;;
      
      # Variável 'contador':
      [cC]) CTD="$OPTARG"
      # Somente números são válidos para o contador:
      [[ $CTD != [0-9]* ]] && CTD=1 ;;

      # Variável 'extensão':
      [eE]) EXT="$OPTARG"
      # Com ou sem ponto separador?
      [[ ${EXT##.*} == $EXT ]] && EXT=".$OPTARG" ;;

      # Obtendo ajuda:
      [aA]) Uso ; exit ;;

      # Opções inválidas:
      *) Echo "Faça: '${0##*/} -a' para obter ajuda."; exit 1 ;;
   esac
done

# Removendo opções para capturar os arquivos a serem renomeados: 
shift $(($OPTIND-1))

# O usuário especificou algum arquivo?
[[ $BASH_ARGC ]] || {
Echo "-> Especifique os arquivos a serem renomeados." && exit 1; }

# Informando o diretório de destino dos arquivos renomeados:
Echo "\aATENÇÃO: Os arquivos renomeados serão movidos para: $PWD"; sleep 2

# Iniciando laço:
for A in $@
do
   # Testes condicionais:
   [[ ! -e $A ]] && Echo "[$A] Arquivo não encontrado." && continue
   [[ ! -w $A ]] && Echo "[$A] Sem permissão para renomear." && continue
   [[ -d $A ]]   && Echo "[$A] Diretórios não serão renomeados." && continue

   # Concatenando variáveis para formar o novo nome:
   NN="${NOME}_${CTD}${EXT}"

   # Renomeando...
   mv --backup=t -T "$A" "$NN" &>/dev/null
   [[ $? ]] && Echo "[$A]: Renomeado!" || Echo "... =("
   
   # Incrementando a variável 'contador':
   ((CTD++))
done
# Fim

Scripts recomendados

Baixando fotos de uma câmera digital pela USB

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - DESBLOQUEAR IP

Jogo de perguntas e respostas

Localizar e excluir linhas repetidas em um arquivo texto

manutenção do squid


  

Comentários
[1] Comentário enviado por SMarcell em 09/04/2008 - 08:14h

Fiz uma atualização nesse script, agora ele renomeia os arquivos da seguinte forma:

arq001 arq002 ... arq100

Além do que, agora é possível fazer backups dos arquivos que serão renomeados.

Link para a versão atualizada:
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