Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Metasys Classmate
Por Gedimar
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Sandro Marcell em 28/07/2008    [ 3236 hits ]

Login: SMarcell, 580401 pontos

Homepage: http://my.opera.com/smarcell/blog/   


Descrição

Simples script em Tcl, que renomeia arquivos de forma padronizada.

Exemplo:

% script.tcl -n texto -e txt -c 1 ~/textos/*
texto001.txt
texto002.txt
...
texto099.txt
texto100.txt
...

Outras versões:
Bash e C Shell: http://www.slackbr.org/forum/viewtopic.php?f=45&t=15052

[ Download: rename.tcl ]   [ Enviar nova versão ]

[ Esconder código-fonte ]

#!/usr/bin/tcl
#
# Simples script para renomear arquivos de forma padronizada.
#
# Sandro Marcell (sandro_marcell@yahoo.com.br)
# Boa Vista, Roraima - 11/07/2008.
#
# Uso: Faca "./script.tcl -a" para mais detalhes.
#
# Obs.:
# - Se declaradas 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;
# - Ao declarar a opcao [-b] um subdiretorio sera criado em /tmp e os
# arquivos serao copiados para ele, antes de serem renomeados;
# - E possivel o uso de metacaracteres.

# Como utilizar o script:
proc uso {argv0} {
puts stdout "Uso: [file tail $argv0] -a -b -c \[numero\] -e \[extensao\] -n \[nome\] arquivo1 ...
Onde:
-a\[A\]          - Exibe esta tela de ajuda
-b\[B\]          - Cria bakcups 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:
[file tail $argv0] -n imagem -c 1 -e jpg ~/pessoal/*.jpg
# Renomear arquivos com o formato 001.txt ... 010.txt ... 100.txt ..:
[file tail $argv0] -e txt ~/documentos/*
# Criar 'backups' dos arquivos antes de renomea-los:
[file tail $argv0] -b -n texto -c 10 -e txt ~/arquivos/*
# Renomear arquivos de diferentes diretorios:
[file tail $argv0] -n copia -c 1 -e bkp ~/pessoal/* ~/documentos/* ~/arquivos/*"
exit 1
}

# Checando parametros:
if {!$argc} {uso $argv0}

# Inicializando variaveis:
set nome {} ; set ext {} ; set ctd 1 ; set bkp {}

# Checando as opcoes definidas pelo usuario:
while {$argc != 0} {
   switch -glob -- [lindex $argv 0] {
   -[aA] {
      # Obtendo ajuda:  
      uso $argv0
   }
   -[bB] {
      # Criando 'backups':
      set bkp "sim"
      set dbkp /tmp/[file tail $argv0]_bkp-[pid]
      if {![file exists $dbkp]} {file mkdir $dbkp}
   }
   -[cC] {
      # Contador:
      # Descartando opcao [-c]:
      lvarpop argv 0
      set ctd [lindex $argv 0]
      # Somente numeros sao validos para o contador:
      if {[regexp {[^0-9]} $ctd] != 0} {set ctd 1}
   }
   -[eE] {
      # Extensao:
      lvarpop argv 0
      set ext [lindex $argv 0]
   }
   -[nN] {
      # Nome:
      lvarpop argv 0
      # Sem espacos em branco:
      set nome [regsub -all { } [lindex $argv 0] _]
   }
   -* {
      # Opcoes invalidas nao serao utilizadas:
      puts stderr "'[lindex $argv 0]' Opcao invalida descartada!"
   }
   default {
      # Todo o restante que sobrar, sera considerado arquivo:
      break
   }
}
lvarpop argv 0
}

# O usuario especificou algum arquivo?
if {"$argv" == {} } {
   puts stderr "Especifique os arquivos a serem renomeados."
   exit 1
}

# Informando usuario:
puts stdout "ATENCAO: Os arquivos renomeados serao movidos para: [pwd]
Renomeando..."
sleep 2

# Loop de execucao:
foreach i $argv {
   # Criar 'backups' antes de renomear arquivos?
   if {$bkp == "sim"} {file copy -force -- "$i" $dbkp}

   # Testes condicionais:
   if {![file exists "$i"]} {
      puts stderr "\[$i\]: Arquivo nao encontrado."
      continue
   } elseif {![file owned "$i"]} {
      puts stderr "\[$i\]: Sem permissao para renomear."
      continue
   } elseif {[file isdirectory "$i"]} {
      puts stderr "Diretorios nao serao renomeados."
      continue
   }

   # Adicionando zeros ao contador (ex.: 001 ... 099):
   set zeros [format %.3d $ctd]
   # Concatenando variaveis para formar o novo nome:
   set nn [concat $nome$zeros.$ext]

   # Renomeando arquivos:
   if {[catch {file rename -force -- "$i" $nn}] == 0} {
      puts stdout "\[$i\] Renomeado para: $nn"
   }

   # Incrementando contador:
   incr ctd
}
# Fim

Scripts recomendados
   Script Linux recomendado param - abre aplicativos com parâmetros no Blackbox e outros
   Script Linux recomendado O mundo do Polinômio
   Script Linux recomendado Visualizador de imagem
   Script Linux recomendado Calculadora em Tcl/Tk
   Script Linux recomendado Corretagem 0.1 - calcula corretagem padrão de operações da Bovespa

Comentários
[1] Comentário enviado por SMarcell em 28/10/2008 - 03:45h:

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


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.