So vergleichen Sie zwei SQL-Bash-Skripte

So vergleichen Sie zwei SQL-Bash-Skripte

Ich habe 2 SQL-Dateien, eine davon ist eine SQLite-transformierte Datenbank und die andere ist eine SQL-Datei, um eine sichere Kopie zu erstellen. Das Problem ist, dass ich nicht weiß, wie ich diese beiden Dateien nehmen und vergleichen und sicher speichern kann. Die minimalen Änderungen, die erforderlich sind, um sie mit der SQLite-transformierten Datenbank identisch zu machen, sind für die Erstellung einer großen Datenbank. Mein aktuelles Skript

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

Antwort1

Ich bin nicht sicher, ob ich verstehe, was Sie erreichen möchten. Ich schätze, das Szenario ist wie folgt:

  • Es gibt eine große Textdatei A.
  • Es gibt eine große Textdatei B, die die meisten Zeilen mit gemeinsam hat A, es gibt jedoch Unterschiede.
  • Sie möchten alle Informationen sichern, aber Sie möchten die Dateien nicht so kopieren/übertragen/speichern, wie sie sind. Stattdessen möchten SieA Unddie minimalen Informationen reichen für eine Reproduktion Baus A.

Wenn ja, dann sind diffund patchdie Werkzeuge, die Sie brauchen.


Das grundlegende Verfahren ist recht unkompliziert. Angenommen, Sie haben Aund B(und keine Datei mit dem Namen A2B.patch, da diese überschrieben wird) in Ihrem aktuellen Verzeichnis, führen Sie Folgendes aus:

diff A B > A2B.patch

Wenn Sie Aund haben A2B.patch(und kein B), können Sie Bmit Folgendem neu erstellen:

patch -o B A A2B.patch

Hinweis: „ A2B.patch“ ist nur ein willkürlicher Name, den ich gewählt habe; es könnte auch „ foo“ sein.


Die Werkzeuge arbeiten mit Linien. Je weniger gemeinsame Linien Sie haben, desto weniger effektiv ist diese Lösung.

Wenn ich Ihr Skript richtig interpretiere, Bist Ihr die Ausgabe von sqlite3-to-mysql.py A. Ich weiß nicht sqlite3-to-mysql.pygenau, was es tut, und ich kenne mich auch nicht gut genug mit SQL aus, um es zuverlässig zu erraten. Wenn es die meisten Zeilen von Ain create ändert B, ist meine Lösung nutzlos. Ich meine: Es sollte immer noch funktionieren, patchwird aber größer als sein, Bsodass es den Sinn verfehlt.

Führen Sie es vielleicht einfach diff A B > patcheinmal aus und prüfen Sie, ob patches für Ihren Zweck klein genug ist.

Studieman 1 patchUndman 1 diffum mehr zu erfahren. Ich war auch beratend tätigDiese Seitewährend ich meine Antwort schreibe.

verwandte Informationen