使用 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
我有很多小的 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