Renomeando arquivos de forma padronizada
Publicado por Sandro Marcell 28/07/2008
[ Hits: 6.486 ]
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
Calculadora com funções básicas
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Wifi não funciona no Aspire ES 15 com o Debian (8)
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta