从 sqlite3 数据库删除旧数据的脚本

lfr*_*eez 1 database sqlite bash

目前,我正在从数据库中手动删除旧数据(超过 90 天的旧数据)sqlite,因此以下是当前执行的步骤。那么伙计们是否可以使用 Bash 脚本来完成这项工作?

1. cd /opt/db                   (my database location)
2. ls -lSh | head -n30          (sorting from top highest size .db files and notes all .db names)

3. sqlite3  test1.db            (select database)
4. delete from tbl_outbox where time<='2016-02-10 00:00:00';      (delete data older more than 90 days)
5. vacuum;  
Run Code Online (Sandbox Code Playgroud)

有20多个.db文件。所以我再一一执行上面的步骤 3 到 5,如下所示

sqlite3  test2.db

delete from tbl_outbox where time<='2016-02-10 00:00:00'; 
vacuum;
Run Code Online (Sandbox Code Playgroud)

你能帮我创建 bash 脚本来完成这项任务吗?

谢谢

lou*_*600 5

Shell 可以循环...假设您使用 bash 或 ksh,您可以使用类似以下示例的内容:

cd /opt/db
DATESTRING=$(date "+%Y-%m-%d 00:00:00" -d "now -90 day")
for DBFILE in *.db
do
  echo "delete from tbl_outbox where time<='$DATESTRING'; vacuum;" | sqlite3 $DBFILE
done
Run Code Online (Sandbox Code Playgroud)

如果您希望让它在特定的数据库列表上运行,请 用空格分隔的数据库文件名列表替换 .db ...如果可以针对 /opt/db/ .db 运行它,则不需要编辑您添加/删除数据库