从 mysql 和 运行 中的表中检索图像并在写入文件系统之前对它们进行 base64 解码

Retrieving images from tables in mysql and running a base64 to decode them before writing to filesystem

我需要帮助。我被难住了。

我正在尝试从 5 tables 中提取存储在 blob 中的最新图像,在将它们保存为图像之前对其应用 base64。我的代码如下。

我最初的问题是我似乎无法将变量 tableId 传递到 mysql 查询中。

table 个名字是 100001、100002、100003、100004、100005 table 列与包含 blob 的 'image' 列和包含时间戳值的 'Time' 列相同。

#!/bin/bash

total=5 #value to increment the devices
tablecount=100000
    for ((i=1; i<=$total; i++))
    do
tableId=$(($tablecount + $i))
echo ${image} | base64 -d > images/$tableID.jpg
done < <(echo "SELECT image, Time FROM table_'$tableID' ORDER BY Time DESC LIMIT 1;" | mysql mydb -u someuser -pPassword)

只需删除单引号,它们就会阻止 shell 扩展文本。您还需要在循环内执行查询。

for ((i=1; i<=$total; i++))
do
    tableId=$(($tablecount + $i))
    echo "SELECT image FROM table_$tableID ORDER BY Time DESC LIMIT 1;" | mysql -sN -u someuser -pPassword mydB | base64 -d > "file$tableId.jpg"
done

我还对时间列进行了处理,并确保 mysql 命令不会打印 headers 或表格。

这是循环部分的测试代码和结果:

$ bash t.sh
SELECT image FROM table_10001 ORDER BY Time DESC LIMIT 1;
SELECT image FROM table_10002 ORDER BY Time DESC LIMIT 1;
SELECT image FROM table_10003 ORDER BY Time DESC LIMIT 1;
SELECT image FROM table_10004 ORDER BY Time DESC LIMIT 1;
SELECT image FROM table_10005 ORDER BY Time DESC LIMIT 1;
$ cat t.sh
total=5
tablecount=10000
for (( i=1 ; i<=$total; i++))
do
    tableId=$(($tablecount + $i))
    echo "SELECT image FROM table_$tableId ORDER BY Time DESC LIMIT 1;" | cat
done