管道解压缩文件到mongoimport
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了管道解压缩文件到mongoimport相关的知识,希望对你有一定的参考价值。
我有一个包含大量JSON文件的zip存档。这些JSON文件中的每一个都是我想要导入MongoDB集合的JSON对象数组。我的想法是使用解压缩的管道选项并将这些文件的内容直接发送到mongoimport:
unzip -p archive.zip *.json | mongoimport -d db_name -c collection_name --jsonArray
我期望与查找结果的管道行为类似:每个文件都正确处理,就像使用此命令一样:
find . -type f -name "*.json" | zip archive.zip -@
但事实并非如此。由于文件的内容输出到std,mongoimport有一个问题,因为它从前一个文件的数组结束后立即从另一个文件获得一个数组的开头。中间没有任何东西(除了我猜的新线之外),所以它就停止了。
有没有其他方法可以实现我的目标?
答案
由于我没有找到能解决我问题的单线程(尽管我仍然认为sed
或awk
有一些潜力),我选择使用while
循环:
#!/bin/bash
ARCHIVE_FILE="archive.zip"
unzip -l $ARCHIVE_FILE | awk 'NR>3{print $4}' | while IFS= read file ; do
unzip -p $ARCHIVE_FILE "$file" | mongoimport -d db_name -c collection_name --jsonArray;
done
我在这里假设unzip -l
具有通用格式,可能并非如此,正如this post的回答评论中所建议的那样。因此,在未来,我可能需要在其上使用一些grep
或sed
。
以上是关于管道解压缩文件到mongoimport的主要内容,如果未能解决你的问题,请参考以下文章