将解压缩的文件管道传输到mongoimport

时间:2018-08-30 14:51:16

标签: pipe unzip mongoimport

我有一个包含许多JSON文件的zip存档。这些JSON文件中的每一个都是我想导入到MongoDB集合中的JSON对象数组。我的想法是使用unzip的管道选项,并将这些文件的内容直接发送到mongoimport:

unzip -p archive.zip *.json | mongoimport -d db_name -c collection_name --jsonArray

我期望与查找结果的传递类似的行为:正确处理每个文件,就像使用以下命令:

find . -type f -name "*.json" | zip archive.zip -@

但不是。由于文件的内容被输出到std,因此mongoimport遇到了问题,因为它从另一个文件中获取数组的开头,紧接在前一个文件中数组的结尾之后。两者之间没有任何关系(我猜除了换行符),所以它停止了。

还有其他方法可以实现我的目标吗?

1 个答案:

答案 0 :(得分:0)

由于我还没有找到能回答我问题的单线解决方案(尽管我仍然相信sedawk中有潜力),所以我选择了{{1 }}循环:

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 具有通用格式,但事实并非如此,正如对this post的评论所建议的那样。因此,将来,我可能需要再加上一些unzip -lgrep