¿Cómo comparar el script bash de 2 SQL?

¿Cómo comparar el script bash de 2 SQL?

Tengo 2 archivos SQL, 1 de ellos es una base de datos transformada SQLite y el otro es un archivo SQL para hacer una copia segura, el problema, no sé cómo tomar estos 2 archivos y compararlos y hacerlos seguros. guarde, los cambios mínimos necesarios para que sea igual al sqlite transformado, es para crear una base de datos grande. Mi guión actual

#!/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

Respuesta1

No estoy seguro de entender lo que estás tratando de lograr. Supongo que el escenario es como:

  • Hay un archivo de texto grande A.
  • Hay un archivo de texto grande Bque comparte la mayoría de las líneas A, aunque existen diferencias.
  • Quiere hacer una copia de seguridad de toda la información pero no desea copiar/transmitir/almacenar ambos archivos tal como están. En cambio tu idea es almacenarA yla información mínima suficiente para Breproducir A.

Si es así, entonces diffy patchson las herramientas que necesita.


El procedimiento básico es bastante sencillo. Suponiendo que tiene Ay B(y ningún archivo nombrado A2B.patchporque se sobrescribirá) en su directorio actual, ejecute:

diff A B > A2B.patch

Luego, si tienes Ay A2B.patch(y no B), puedes recrear Bcon:

patch -o B A A2B.patch

Nota: " A2B.patch" es sólo un nombre arbitrario que elegí; puede ser " foo".


Las herramientas funcionan con líneas. Cuantas menos líneas comunes tengas, menos efectiva será esta solución.

Si interpreto bien tu script, tu Bes el resultado de sqlite3-to-mysql.py A. No sé qué sqlite3-to-mysql.pyhace exactamente, ni estoy lo suficientemente familiarizado con SQL como para adivinarlo de manera confiable. Si cambia la mayoría de las líneas Apara crear B, mi solución será inútil. Quiero decir: aún debería funcionar, pero patchserá más grande, Bpor lo que no entenderá el objetivo.

Tal vez simplemente ejecute diff A B > patchuna vez y compruebe si patches lo suficientemente pequeño para su propósito.

Estudiarman 1 patchyman 1 diffaprender más. yo también estuve consultandoeste sitiomientras escribo mi respuesta.

información relacionada