
私は 2 つの SQL ファイルを持っています。1 つは SQLite で変換されたデータベースで、もう 1 つは安全なコピーを作成するための 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
次に、と がある場合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
もっと詳しく知りたいです。また、このサイト答えを書いているときに。