如何比較2個sql bash腳本

如何比較2個sql bash腳本

我有 2 個 SQL 文件,其中 1 個是 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

如果是這樣,那麼diffpatch就是您需要的工具。


基本流程非常簡單。假設您目前目錄中有Aand B(並且沒有指定文件,A2B.patch因為它將被覆寫),請執行:

diff A B > A2B.patch

然後,如果您有Aand 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 patchman 1 diff了解更多。我也在諮詢這個網站在寫我的答案時。

相關內容