
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
B
que comparte la mayoría de las líneasA
, 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 almacenar
A
yla información mínima suficiente paraB
reproducirA
.
Si es así, entonces diff
y patch
son las herramientas que necesita.
El procedimiento básico es bastante sencillo. Suponiendo que tiene A
y B
(y ningún archivo nombrado A2B.patch
porque se sobrescribirá) en su directorio actual, ejecute:
diff A B > A2B.patch
Luego, si tienes A
y A2B.patch
(y no B
), puedes recrear B
con:
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 B
es el resultado de sqlite3-to-mysql.py A
. No sé qué sqlite3-to-mysql.py
hace exactamente, ni estoy lo suficientemente familiarizado con SQL como para adivinarlo de manera confiable. Si cambia la mayoría de las líneas A
para crear B
, mi solución será inútil. Quiero decir: aún debería funcionar, pero patch
será más grande, B
por lo que no entenderá el objetivo.
Tal vez simplemente ejecute diff A B > patch
una vez y compruebe si patch
es lo suficientemente pequeño para su propósito.
Estudiarman 1 patch
yman 1 diff
aprender más. yo también estuve consultandoeste sitiomientras escribo mi respuesta.