我有一个包含许多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遇到了问题,因为它从另一个文件中获取数组的开头,紧接在前一个文件中数组的结尾之后。两者之间没有任何关系(我猜除了换行符),所以它停止了。
还有其他方法可以实现我的目标吗?
答案 0 :(得分:0)
由于我还没有找到能回答我问题的单线解决方案(尽管我仍然相信sed
或awk
中有潜力),所以我选择了{{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 -l
或grep
。