У меня есть 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 ответ1

0

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

  • Существует большой текстовый файл 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, чтобы надежно угадать. Если это изменит большинство строк A чтобы создать B тогда мое решение будет бесполезным. Я имею в виду: он все еще должен работать, но patch будет больше, чем B поэтому он упустит смысл.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .