MySQL DBにリンクされたファイルをダウンロードしてテキストを抽出した後、bashスクリプトを使用してデータベースに挿入しますか?

MySQL DBにリンクされたファイルをダウンロードしてテキストを抽出した後、bashスクリプトを使用してデータベースに挿入しますか?

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

おすすめ記事