管道解压缩文件到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有一个问题,因为它从前一个文件的数组结束后立即从另一个文件获得一个数组的开头。中间没有任何东西(除了我猜的新线之外),所以它就停止了。

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

答案

由于我没有找到能解决我问题的单线程(尽管我仍然认为sedawk有一些潜力),我选择使用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的回答评论中所建议的那样。因此,在未来,我可能需要在其上使用一些grepsed

以上是关于管道解压缩文件到mongoimport的主要内容,如果未能解决你的问题,请参考以下文章

使用管道压缩/解压

python python zipfile获取并解压缩片段

解压缩包含多个条目的存档

python颜色压缩的结果颜色比保存颜色深

ZipInputStream - 解压缩文件的功能方法

Python 管道 - 增量读取输出时会发生啥