0

我有一个包含大量 SQLite 数据库文件的目录。

我需要运行 sqlite3 查询来确定我的目录中的任何数据库是否包含特定表。数据库文件名类似于 001.db、002.db 等。如果数据库包含我需要的表,则将文件复制到不同的目录。

我最初的想法是这样的:

while [ sqlite3 $* "SELECT * FROM table1" != "Error: no such table: table1" ]`

cp $* 新目录/

完毕

或类似的东西,我需要一些有关正确语法的帮助...

在“$ *”中,我的意思是目录中当前正在处理的数据库文件,不确定它是否正确......

4

1 回答 1

2

首先,您不需要在表中进行选择来查看它是否存在。你可以运行类似的东西:

SELECT * FROM dbname.sqlite_master WHERE type='table';

或对其进行调整以进行计数:

SELECT count(*) FROM dbname.sqlite_master WHERE type='table' and name='table_name';

使用 sqlite 命令行,您应该得到“1”或“0”。您可以使用它来确定数据库是否真的有您想要的表并采取相应的行动。该脚本可能类似于:

for i in `ls *.db`; do
    HAS_TABLE=`sqlite "${i}" "select count(*) ....;"
    if [[ ${HAS_TABLE} == "1" ]]; then
      cp ${i} some/other/dir/${i}
    fi
done

我是从内存中写出来的,所以 if/condition 的语法可能有点偏离(如果没有1值周围的引号,你可能没问题)。

高温下,

于 2013-02-14T15:23:28.027 回答