Renomeando arquivos de forma padronizada
Publicado por Sandro Marcell 28/07/2008
[ Hits: 6.754 ]
Homepage: http://sanmarcell.wordpress.com
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
#!/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
Script em Tcl para descompactar arquivos
Script em Tcl para descompactar arquivos
param - abre aplicativos com parâmetros no Blackbox e outros
Calculadora com funções básicas
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (2)
O programa assinador digital (3)
Warcraft II Remastered no Linux? (2)









