Intereting Posts
RHEL 6.4 и OpenSSL 1.0.1 – Зависимость отсутствует .. но это не так? Что означает установка устройства в Linux? максимальное количество файлов ls может отображать Ноутбук Asus X540S: внутренний микрофон, но не работает Почему `rename` ведет себя по-разному, когда я использую полный путь вместо текущего пути? Sudo с паролем и добавляется в файл через SSH Формирование новых строк с печатью подстановок кошки Значок SSH не отображается как построить несколько графиков в одном сюжете? Сохранение последних двух версий и удаление оставшихся Как выбрать уникальные значения массива? В чем смысл правила «в спецификации POSIX не указано, является ли оно ASSIGNMENT_WORD или WORD» CSV-копия не копирует 5 файлов из 4000+ Как узнать, какая конкретная электронная почта в Thunderbird / Icedove содержит вредоносное ПО Doc.Dropper.Agent-1552723, на которое указывает Clamscan? Как узнать, существует ли каталог?

Загрузить файл, связанный в MySQL DB, извлечь текст и вставить в db с помощью скрипта bash?

Я хочу загрузить файл (загружайте только в том случае, если URL-адрес заканчивается определенной строкой), какой URL-адрес находится в базе данных MySQL, извлекает текст и записывает текст в базу данных, заменяя URL-адрес.
И это нужно сделать для каждой строки (около 25 тыс. Строк).

Есть ли способ сделать это с помощью сценария 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 

Как я могу его защитить?

Чтобы быть в безопасности, вы должны смотреть на сгенерированный код, если код может быть введен.

В этой команде 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}; вы можете представить, что он содержит одну цитату, в этом случае вам нужно заменить на две одинарные кавычки, вы также можете проверить длину меньше длины столбца в базе данных (предположим здесь 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