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그런 다음 and가 있고 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자세히 알아보기 나도 상담 중이었는데이 장소내 대답을 쓰는 동안.

관련 정보