我有一个多达 5 万个名字的列表。我需要在日志中搜索,那些在多个 zip 文件中。这些 zip 文件位于不同的文件夹中并且很大(最大 450GB)。一个zip文件中有多个文件。
现在我正在迭代每个 zip 文件和每个文件的日志文件并在其中搜索名称。
cd /disk1/ABCDEFArchive/
while read pl; do
echo Searching $pl
for i in 3 3-AB 3-CD 3-EF 4 4-AB 4-CD 4-EF 5 5-AB 5-CD 5-EF
do
cd web$i
for j in 2017-09 2017-10 2017-11 2017-12 2017-01 2017-02
do
for k in $(unzip -l ABCDEF-${j}.zip | awk '{print $4}' | grep ABCDEF)
do
echo "searching $pl in web$i ===>>> ABCDEF-${j}.zip ===>>> $k "
isexists=$(unzip -p ABCDEF-${j}.zip $k | grep "=${pl}" | head -1 )
if [[ ! -z "$isexists" ]]; then
mysql -e "update test.product_list_tobedeleted set foundinlogs=1 where list_name =\"${pl}\";"
echo "$pl@@@$isexists" >>${ScriptPath}/ProductlistFound.csv
break 3
fi
done
done
cd ..
done
但自一个月以来,它的工作速度非常缓慢,并且仍然以 3000 的名义运行
我还尝试了更多的工作方法,比如在 zip 文件中找到而不在每个日志文件中迭代等,但这些更糟糕。
最佳答案
为了有效地搜索 zip 文件,有人建议尝试 ugrep这很像 grep,但也可以使用并行线程有效地搜索 zip/tar/cpio/pax 文件。使用选项 ugrep -l -z PATTERN
如果找到模式匹配,则生成输出结果,或者仅测试 ugrep -q -z PATTERN
的退出如果找到模式匹配,则退出为零(成功)。在 -q
的情况下, ugrep 在找到模式匹配后不会继续解压缩和搜索 zip 文件,这应该会更快。使用选项 -F
搜索字符串而不是正则表达式。
关于linux - 在 zip 文件中搜索字符串的最快 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50234144/