Como comparar o script 2 sql bash

0

Eu tenho 2 arquivos SQL, 1 deles, é um banco de dados tranformado SQLite e o outro, é um arquivo SQL para fazer uma cópia segura, o problema, eu não sei como tirar esses 2 arquivos e compará-los e Faça o save seguro, as mudanças mínimas necessárias para torná-lo o mesmo que o sqlite transformado, é para fazer um grande banco de dados. Meu script atual

#!/bin/bash
#test
#Nombre de los ficheros
sdb=prueba; #Ubicacion del fichero el cual empezaremos la conversion
mysql=SQLprueba; #Nombre del fichero el cual se creara y a posterior se utilizara
script=sqlite3-to-mysql.py #Ubicacion del fichero script.py para conversion
#Login de la base de datos
user=root;
paswd=new_password;

#Almacenador de comandos 
hora_fichero='ls -l | grep $sdb | cut -d" " -f10 |tr -d ":"'
hora_local=date | cut -d" " -f5 | cut -d":" -f1-2 | tr -d ":"
minutos=5
comandosql='sqlite3 $sdb .dump> $mysql.sql' #convierte el sqlite en sql
comandomysql= ./$script $mysql.sql >$mysql.mysql #Convierte el sql en mysql
#Inicio del programa 
echo "Convertidor de ficheros automatizado"
if [ "$hora_local-$hora_fichero -lt 5"  ]; then #Realiza la copia de seguridad porque han pasado mas de x segundos
    echo "Vamos a proceder"
    if [ -f $sdb ]; then #Combrueba que el fichero exista por si las moscas
        if [ -f $mysql ]; then #Comprueba que no exista un .mysql y lo borra por si las moscas
            rm $mysql.sql
            echo "el fichero existe, transformando"
            $comandosql
            $comandomysql
        else
            echo "el fichero existe, transformando"
            $comandosql
            $comandomysql
        fi
    else
        echo "el fichero a transformar es inexistente"
    fi
else
    echo "No hay nada a salvar" #No es necesario  copia, no ha habido nada modificado en estos 5 m
fi
    
por Archeon El Centinela 10.10.2017 / 11:50

1 resposta

0

Não sei se entendi o que você está tentando alcançar. Eu acho que o cenário é como:

  • Existe um arquivo de texto grande A .
  • Existe um arquivo de texto grande B , que compartilha a maioria das linhas com A , mas há diferenças.
  • Você deseja fazer backup de todas as informações, mas não deseja copiar / transmitir / armazenar os dois arquivos como estão. Em vez disso, sua idéia é armazenar A e as informações mínimas suficientes para reproduzir B de A .

Se sim, então diff e patch são as ferramentas que você precisa.

O procedimento básico é bastante simples. Supondo que você tenha A e B (e nenhum arquivo chamado A2B.patch porque será sobrescrito) em seu diretório atual, execute:

diff A B > A2B.patch

Então, se você tiver A e A2B.patch (e não B ), poderá recriar B com:

patch -o B A A2B.patch

Nota: " A2B.patch " é apenas um nome arbitrário que eu escolhi; pode ser " foo ".

As ferramentas funcionam com linhas. Quanto menos linhas comuns você tiver, menos eficaz será essa solução.

Se eu interpretar seu script corretamente, seu B é a saída de sqlite3-to-mysql.py A . Eu não sei o que o sqlite3-to-mysql.py faz exatamente, nem sou profundo o suficiente no SQL para adivinhar de forma confiável. Se mudar a maioria das linhas de A para criar B , minha solução será inútil. Quero dizer: ainda deve funcionar, mas patch será maior que B , por isso vai perder o ponto.

Talvez seja só executar diff A B > patch uma vez e verificar se patch é pequeno o suficiente para o seu propósito.

Estude man 1 patch e man 1 diff para saber mais. Eu também estava consultando este site enquanto escrevia minha resposta.

    
por 11.10.2017 / 12:45