对一个目录中的多个数据库循环SQLite查询,以对正命中进行排序(UNIX)
我有一个包含很多SQLite数据库文件的目录 我需要运行sqlite3查询,以确定我的目录中是否有任何数据库包含特定的表。数据库文件名类似于001.db、002.db等。如果数据库包含我需要的表,则会将文件复制到其他目录 我最初的想法与此类似: 而[sqlite3$*“从表1中选择*!=”错误:没有这样的错误 表:表1“]` 做 cp$*newdir/ 完成 或者类似的东西,我需要一些帮助来纠正语法对一个目录中的多个数据库循环SQLite查询,以对正命中进行排序(UNIX),sqlite,unix,loops,Sqlite,Unix,Loops,我有一个包含很多SQLite数据库文件的目录 我需要运行sqlite3查询,以确定我的目录中是否有任何数据库包含特定的表。数据库文件名类似于001.db、002.db等。如果数据库包含我需要的表,则会将文件复制到其他目录 我最初的想法与此类似: 而[sqlite3$*“从表1中选择*!=”错误:没有这样的错误 表:表1“]` 做 cp$*newdir/ 完成 或者类似的东西,我需要一些帮助来纠正语法 在“$*”中,我指的是目录中当前正在处理的数据库文件,不确定它是否正确…首先,不需要在表中进行选
在“$*”中,我指的是目录中当前正在处理的数据库文件,不确定它是否正确…首先,不需要在表中进行选择以查看它是否存在。你可以这样做:
SELECT * FROM dbname.sqlite_master WHERE type='table';
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
或者调整它以进行计数:
SELECT count(*) FROM dbname.sqlite_master WHERE type='table' and name='table_name';
使用sqlite命令行,您应该得到一个“1”或“0”。您可以使用它来确定DB是否真的有您想要的表,并相应地采取行动。脚本可能看起来像:
SELECT * FROM dbname.sqlite_master WHERE type='table';
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/条件的语法可能有点不正确(如果1
值周围没有引号,您可能就可以了)
嗯,谢谢。我主要关心的是在命令上执行一个循环,将命中率为正的数据库复制到一个新目录。