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

Using find, sqlite3, and xargs, to combine many small sqlite database files

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

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

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

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

您不能同时执行此操作:

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

但是你可以做:

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