
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 hatA
, 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 Sie
A
Unddie minimalen Informationen reichen für eine ReproduktionB
ausA
.
Wenn ja, dann sind diff
und patch
die Werkzeuge, die Sie brauchen.
Das grundlegende Verfahren ist recht unkompliziert. Angenommen, Sie haben A
und 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 A
und haben A2B.patch
(und kein B
), können Sie B
mit 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, B
ist Ihr die Ausgabe von sqlite3-to-mysql.py A
. Ich weiß nicht sqlite3-to-mysql.py
genau, 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 A
in create ändert B
, ist meine Lösung nutzlos. Ich meine: Es sollte immer noch funktionieren, patch
wird aber größer als sein, B
sodass es den Sinn verfehlt.
Führen Sie es vielleicht einfach diff A B > patch
einmal aus und prüfen Sie, ob patch
es für Ihren Zweck klein genug ist.
Studieman 1 patch
Undman 1 diff
um mehr zu erfahren. Ich war auch beratend tätigDiese Seitewährend ich meine Antwort schreibe.