bash在ZIP文件中搜索关键字?

时间:2013-06-04 17:29:32

标签: bash

我正在寻找一种在ZIP文件中搜索的方法。我的系统管理员让我可以访问包含大约150万个ZIP的大容量存储设备。

每个ZIP最多可包含1,000个(ASCII)文件。通常,文件的名称中包含部件号,如下所示:supplier_code~part_number~yyyymmdd~hhmmss.txt

我的老板让我在ZIPS上搜索特定的部件号。如果我找到与部件号匹配的文件,我需要解压缩该特定文件。到目前为止,我已尝试过一些ZIP:

  

for find . -name "*zip*";解压缩$ i tmp /;完成

问题是它解压缩了一切。这是不正确的。我试着像这样指定部件号(阅读解压缩手册页)

  

for find . -name "*zip*";解压缩$ i -c * part_number * tmp /;完成

但它没有用(没有找到)。我得到了正确的部件号。

我正在尝试做什么?

2 个答案:

答案 0 :(得分:3)

您需要使用-l的{​​{1}}选项。来自unzip页面:

  

-l list archive files(短格式)。名称,未压缩文件大小以及指定文件的修改日期和时间   打印,以及指定的所有文件的总计。如果UnZip是                 在定义了OS2_EAS的情况下编译,-l选项还列出了存储的OS / 2扩展属性(EA)大小的列   和OS / 2访问控制列表(ACL)。另外,还有zipfile   评论和                 显示单个文件注释(如果有)。如果文件是从单个案例文件系统归档的(例如,旧文件系统)   MS-DOS FAT文件系统)和-L选项,文件名   是                 转换为小写并以插入符号(^)为前缀。

所以尝试这样的事情 -

man

由于您提到有数百万个zip文件,因此您可能不需要所有日志记录。这仅仅是例如。

答案 1 :(得分:0)

我找到了问题的答案。它实际上非常简单

for i in `find . -name "*zip"`; do unzip -o $i "*partnumber*" -d /tmp/ ; done

例如,此代码

for i in `find . -name "*zip"`; do unzip -o $i "*3460*" -d /tmp/ ; done

实际上会查看设备上的拉链,但只能解压缩与部件号匹配的文件。