使用find,sqlite3和xargs来组合许多小的sqlite数据库文件

时间:2018-03-20 17:49:12

标签: sqlite find xargs

我有很多小的sqlite数据库文件。每个都是由运行的java应用程序生成的。我想将它们组合成一个带有find的单个数据库。

find . -name '*.db' -print0 | xargs -0 -I{} -P 4 `sqlite3 .dump {} | sqlite3 Combined.db`

OR

find . -name '*.db' -exec sqlite3 {} .dump \; | sqlite3 Combined.db

到目前为止我取得的最大成功是将一个数据库的内容写入Combined.db。所有其他变体都会导致错误。

1 个答案:

答案 0 :(得分:1)

你不能同时做到这一点:

Error: near line 14: database is locked
Error: near line 3: database is locked

但你可以做:

mrg() {
  sqlite3 "$1" .dump |
    perl -pe 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g;' |
    sqlite3 cmb;
}
export -f mrg
find . -name '*.db' | parallel -j1 mrg