quinta-feira, dezembro 09, 2004

Script de substituição em série

Script para bash que lê um arquivo de "configuração" com uma lista de palavras e depois entra interativamente em uma lista de subdiretórios varrendo arquivos de texto um a um e substituindo expressões por outras.

O mesmo lagoritmo pode ser usado para criar semelhante em perl, php, python, c etc. Dependendo da linguagem ele cobrirá outras plataformas.

Foi testado em textos menos complexos distribuídos em árvores de diretórios. Pode ser usado por exemplo em diretórios de páginas de html.


#! /bin/bash
# clontexto - Deve ter um jeito mais facil de se fazer essa @#$%!! de serviço.

[[ $# -ne "3" ]] && echo -e "Parametros errados.\nUse ./clontexto.sh " && exit;
[[ ! -f $1 ]] && echo "$1: Arquivo inexistente" && exit;
[[ ! -d $2 ]] && echo "$2: Diretorio inexistente" && exit;
[[ -d $3 ]] && echo "$3: Destino existente" && exit;

direc () {
    cd $1;
    q=`pwd`;
    d=${q/$dir_mod/};

    [[ ! -d $dest_dir/$d ]] && mkdir $dest_dir/$d;

    for i in *; do
        [[ -d $i ]] && direc "$i"
        [[ -f $i ]] && sed "${f[*]}" "$i" > "$dest_dir/$d$i";
    done;
    cd ..
}

arq_conf=$1;
dir_mod=$2;
dest_dir=$3;

t=1;
while read i; do
    f[$((t++))]="s/${i/://}/g;";
done < $arq_conf;

c=`pwd`; t=1;
direc "$dir_mod" "$dest_dir";
cd $c;