4

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

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

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

我在find . -name "*zip*";解压 $i tmp/ ;完毕

问题是它会解压缩所有内容。这是不正确的。我试图像这样指定零件号(阅读解压缩手册页)

我在find . -name "*zip*";解压 $i -c *part_number* tmp/ ;完毕

但它没有用(什么也没找到)。我得到了正确的零件编号。

我正在尝试做的事情可能吗?

4

2 回答 2

3

您需要-l使用unzip. 从man页面:

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

所以尝试这样的事情 -

for i in *.zip; do 
    echo "scanning $i";
    grep -oP "ixia" <(unzip -l "$i") && echo "Found in $i" || echo "Not Found in $i"; 
done

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

于 2013-06-04T17:39:20.270 回答
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

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

于 2013-06-06T17:31:52.770 回答