MySQLデータベースにあるファイル(URLが特定の文字列で終わる場合のみ)をダウンロードし、URLを置き換えてテキストを抽出し、データベースにテキストを書きたいです。
そして、これはすべての行(約25,000行)に対して行われなければなりません。
Bashスクリプト(またはJavaなどの他のスクリプト)を使用してこれを実行する方法はありますか?
MySQLサーバーは私のLinuxのルートディレクトリで実行され、私はそれへのフルアクセスを持っています。私のデスクトップオペレーティングシステムもLinuxです(多くのカスタム機能を備えたLinux Mint)。
これまで私がしたことは次のとおりです。
#!/bin/bash
for (( i=1; i <= 5; i++))
do
DBQUERY=`mysql -B -ss -uuser -ppassword -e "USE table; SELECT column FROM table WHERE pid='$i';"`
if [[ $DBQUERY == *.pls ]] ;
then
wget -O tempfile.pls $DBQUERY
while read line
do
if [[ $line == File1=* ]] ;
then
mysql -B -ss -uuser -ppassword -e "USE table; UPDATE table SET column = '${line:6}' WHERE pid = '$i';"
fi
done <tempfile.pls
fi
done
どうやって安全に保管できますか?
答え1
安全を確保するには、生成されたコードを挿入できることを確認する必要があります。
このコマンドでは、mysql -B -ss -uuser -ppassword -e "USE table; SELECT column FROM table WHERE pid='$i';"
iは1から5までの数字であることがわかるので、問題はありません。
ただし、このコマンドではmysql -B -ss -uuser -ppassword -e "USE table; UPDATE table SET column = '${line:6}' WHERE pid = '$i';"
$ {line:6}に一重引用符が含まれていることを確認できません。この場合は、二重引用符を2つに置き換える必要があり、長さが列より小さいことを確認することもできます。データベースの長さ(ここでは255と仮定)を変更するか、引用符を置き換える前にデータを切り捨てます。
#!/bin/bash
for (( i=1; i <= 5; i++))
do
DBQUERY=`mysql -B -ss -uuser -ppassword -e "USE table; SELECT column FROM table WHERE pid='$i';"`
if [[ $DBQUERY == *.pls ]] ;
then
wget -O tempfile.pls $DBQUERY
while read line
do
if [[ $line == File1=* ]] ;
then
str=${line:6:255}
str=${str//\'/''}
mysql -B -ss -uuser -ppassword -e "USE table; UPDATE table SET column = '$str' WHERE pid = '$i';"
fi
done <tempfile.pls
fi
done