Como comparar o script bash 2 sql

Como comparar o script bash 2 sql

Eu tenho 2 arquivos SQL, 1 deles é um banco de dados SQLite transformado e o outro é um arquivo SQL para fazer uma cópia segura, o problema, não sei como pegar esses 2 arquivos e compará-los e torná-los seguros salve, as alterações mínimas necessárias para torná-lo igual ao sqlite transformado, é para criar um grande banco de dados. Meu roteiro 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

Responder1

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

  • Há um grande arquivo de texto A.
  • Há um grande arquivo de texto Bque compartilha a maioria das linhas A, mas existem 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 ideia é armazenarA ea informação mínima suficiente para Breproduzir A.

Se sim, então diffe patchsão as ferramentas que você precisa.


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

diff A B > A2B.patch

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

patch -o B A A2B.patch

Nota: " A2B.patch" é apenas um nome arbitrário que 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, você Bserá a saída de sqlite3-to-mysql.py A. Não sei o que sqlite3-to-mysql.pyacontece exatamente, nem sou profundo o suficiente em SQL para adivinhar com segurança. Se mudar a maioria das linhas de Acriação B, minha solução será inútil. Quero dizer: ainda deve funcionar, mas patchserá maior do que Bisso, e perderá o foco.

Talvez apenas execute diff A B > patchuma vez e verifique se patché pequeno o suficiente para o seu propósito.

Estudarman 1 patcheman 1 diffaprender mais. Eu também estava consultandoesse siteenquanto escrevo minha resposta.

informação relacionada