Renomeando arquivos de forma padronizada
Publicado por Sandro Marcell 18/08/2008
[ Hits: 9.219 ]
Homepage: http://sanmarcell.wordpress.com
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
...
#!/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
Limpando pacotes desnecessários com apt-get
Script que verifica se existem arquivos repetidos em dois diretórios
Verificando espaço de Disco usando Dialog
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Melhorando a precisão de valores flutuantes em python[AJUDA] (11)
GLPI - Configuração de destinatário com conta Microsoft Exchange (0)
Vou voltar moderar conteúdos de Dicas e Artigos (3)
OpenVPN no MACBOOK conecta mas não pinga pastas de rede compartilhada ... (1)