Как сравнить 2 скрипта SQL Bash

Как сравнить 2 скрипта SQL Bash

У меня есть 2 файла SQL, один из них — это преобразованная база данных SQLite, а другой — файл SQL для создания защищенной копии, проблема в том, что я не знаю, как взять эти 2 файла, сравнить их и сделать защищенное сохранение, нужны минимальные изменения, чтобы сделать его таким же, как преобразованный sqlite, это для создания большой базы данных. Мой текущий скрипт

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

решение1

Я не уверен, что понимаю, чего вы пытаетесь добиться. Думаю, сценарий такой:

  • Имеется большой текстовый файл A.
  • Существует большой текстовый файл B, большинство строк которого совпадают с A, однако есть и различия.
  • Вы хотите сделать резервную копию всей информации, но вы не хотите копировать/передавать/хранить оба файла как они есть. Вместо этого ваша идея заключается в том, чтобы хранитьA иминимальная информация, достаточная для Bвоспроизведения A.

Если да, то diffэто patchименно те инструменты, которые вам нужны.


Основная процедура довольно проста. Предполагая, что у вас есть Aи B(и нет имени файла, A2B.patchпотому что он будет перезаписан) в вашем текущем каталоге, выполните:

diff A B > A2B.patch

Тогда, если у вас есть Aи A2B.patch(и нет B), вы можете воссоздать Bс помощью:

patch -o B A A2B.patch

Примечание: « A2B.patch» — это просто произвольное имя, которое я выбрал; это может быть « foo».


Инструменты работают с линиями. Чем меньше у вас общих линий, тем менее эффективным будет это решение.

Если я правильно понимаю ваш скрипт, то Bэто вывод sqlite3-to-mysql.py A. Я не знаю, что sqlite3-to-mysql.pyименно делает, и я не настолько глубоко разбираюсь в SQL, чтобы надежно угадать. Если он меняет большинство строк на Acreate B, то мое решение будет бесполезным. Я имею в виду: он все равно должен работать, но patchбудет больше, чем , Bпоэтому не достигнет цели.

Может быть, просто запустите diff A B > patchодин раз и проверьте, patchдостаточно ли он мал для ваших целей.

Изучатьman 1 patchиman 1 diffузнать больше. Я также консультировалсяэтот сайтпока писал свой ответ.

Связанный контент