Renomeando arquivos de forma padronizada
Publicado por Sandro Marcell 18/08/2008
[ Hits: 9.313 ]
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
Soma múltiplos de 3 ou 5 abaixo de 1000
Script para ativar a interface de rede
Script simples em Shell para testar se o kernel está com o patch KPTI habilitado
Automatizando digitação de códigos 2FA no browser
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Como converter imagens PNG/JPEG para SVG em linha de comando
Fez porcaria no teu repositório Git? Aprenda a restaurar uma versão anterior do seu código!
Restaurando Fontes de Download do Hydra no Linux
Atualizando "na marra" o YT-DLP quando começa a dar erro de downloads
Como instalar o WPS com interface e corretor ortográfico em PT-BR no Arch Linux
[AJUDA] Problemas ao atualizar BIOS da Gigabyte B550M K rev. 1.1 — “RO... (5)
Impossível ativar audio 5.1 (1)
Inicializaçao lenta (alguns processos rodando) Debian 11 Bullseye [RES... (2)