如何比较 2 个 SQL Bash 脚本

如何比较 2 个 SQL Bash 脚本

我有 2 个 SQL 文件,其中 1 个是 SQLite 转换的数据库,另一个是用于制作安全副本的 SQL 文件,问题是,我不知道如何获取这两个文件并进行比较并进行安全保存,需要进行最小的更改才能使其与转换后的 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

如果是这样,那么diffpatch就是您需要的工具。


基本步骤非常简单。假设当前目录中有AB(并且没有文件命名,A2B.patch因为它将被覆盖),请运行:

diff A B > A2B.patch

然后如果你有AA2B.patch(并且没有B),你可以B使用以下命令重新创建:

patch -o B A A2B.patch

注意:“ A2B.patch”只是我选择的任意名称;它可以是“ foo”。


这些工具使用线来工作。公共线越少,此解决方案的效果就越差。

如果我正确理解了你的脚本,你的B输出是sqlite3-to-mysql.py A。我不知道sqlite3-to-mysql.py具体是什么,我对 SQL 的了解也不够深入,无法准确猜测。如果它将 的大部分行更改A为 create B,那么我的解决方案将毫无用处。我的意思是:它应该仍然有效,但patch会大于,B因此它会偏离重点。

也许只需运行diff A B > patch一次并检查是否patch足够小以满足您的目的。

学习man 1 patchman 1 diff了解更多信息。我还担任顾问本网站在写我的答案时。

相关内容