Script para fazer replace

Script para Replace

Você nunca teve a necessidade de mudar o nome de uma classe algumas vez e pensou. Poxa esse nome vai ficar muito melhor, mas eu terei que modificar todos os arquivos e ai?

Existem 11 caminhos o fácil, o díficil e o lento:

  1. O Difícil é abrir cada arquivo na mão e modificar todas as ocorrências do nome no seu programa e se você utiliza alguma mecanismo de teste para o seu software você roda o teste e se quebrar você vai cosertando smile senão você arrisca dizer que já modificou tudo smile
  2. O caminho fácil é você fazer um script que modifique todos os nomes a partir de uma pasta, mas se você não sabe fazer script o caminho torna-se difícil também smile
  3. Você pode usar alguma ferramenta como o Eclipse que realiza este trabalho para você. Mas ai você vai precisar de um computador potente para rodar esta tranqueira porque ele é feito em java (Nunca é demais sacanear java smile ) e se você for rodar isso no windows então se prepare para comprar um servidor smile

Então a proposta aqui é deixar o caminho fácil mais fácil ainda :), pois se eu ter entregar o script o empecilho se acaba smile

O Troço

O código do script é esse:


#!/bin/bash
for file in `ls $1`
do
  if [ -f $1/$file ] 
  then
    `sed "s/$2/$3/" "$1/$file" >> "/tmp/replace_tmp"`
    `mv "/tmp/replace_tmp" "$1/$file" `
  fi 

  if [ -d $1/$file ]
  then
    ./$0 $1/$file $2 $3
  fi 
done

exit 0

Para utilizá-lo:


 ./replace  raiz_onde_substituir 'nome_a_ser_substituido' 'novo_nome'

Para que você possa testar o script eu criei um tar (clique aqui para baixá-lo) com uma pasta chamada testes que possui outras duas pastas dentro e alguns arquivos que possuem o nome 'Luis' neles.

Rode o comando


./replace testes 'Luis' 'Leandro'

O script substituirá todas as ocorrências do nome 'Luis' por 'Leandro' recursivamente.

Dicas

caso você queira substituir um nome que tenha '/' você deve escapar o caracter

Ex:


./replace testes  '\/home\/luis' '\/home\/leandro'

Tags:
create new tag

Warning
Can't INCLUDE '', path is empty or contains illegal characters.