将解压缩的文件管道到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具有通用格式,但事实可能并非如此,正如本文的回答评论中所建议的那样。所以,在未来,我可能需要在此基础上进行一些grepsed

最新更新