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