
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
B
que compartilha a maioria das linhasA
, 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 é armazenar
A
ea informação mínima suficiente paraB
reproduzirA
.
Se sim, então diff
e patch
são as ferramentas que você precisa.
O procedimento básico é bastante simples. Supondo que você tenha A
e B
(e nenhum arquivo nomeado A2B.patch
porque será sobrescrito) em seu diretório atual, execute:
diff A B > A2B.patch
Então, se você tiver A
e A2B.patch
(e não B
), poderá recriar B
com:
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ê B
será a saída de sqlite3-to-mysql.py A
. Não sei o que sqlite3-to-mysql.py
acontece exatamente, nem sou profundo o suficiente em SQL para adivinhar com segurança. Se mudar a maioria das linhas de A
criação B
, minha solução será inútil. Quero dizer: ainda deve funcionar, mas patch
será maior do que B
isso, e perderá o foco.
Talvez apenas execute diff A B > patch
uma vez e verifique se patch
é pequeno o suficiente para o seu propósito.
Estudarman 1 patch
eman 1 diff
aprender mais. Eu também estava consultandoesse siteenquanto escrevo minha resposta.