4

ZIP ファイル内を検索する方法を探しています。システム管理者は、約 150 万の ZIP を含む大容量記憶装置へのアクセスを許可してくれました。

各 ZIP には、最大 1,000 個の (ASCII) ファイルを含めることができます。通常、ファイルには次のように部品番号が含まれる名前があります。supplier_code~part_number~yyyymmdd~hhmmss.txt

上司から、すべての ZIPS で特定の部品番号を検索するように依頼されました。部品番号に一致するファイルが見つかった場合は、その特定のファイルを解凍する必要があります。私はこれまでにいくつかのZIPでこれを試しました:

私のためにfind . -name "*zip*"; $i tmp/ を解凍します。終わり

問題は、すべてを解凍することです。それは正しくありません。そのように部品番号を指定しようとしました(unzipのmanページを読んでください)

私のために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 に答える