2017-05-21 2 views
0

私はsolarisで.tar.gz形式のファイルを持っています。私はそれからいくつかの行をgrepしたい。私はzipgrepコマンドを使用していますが、行を見つけることができません。以下は、私が使用しているサンプルファイルとコマンドです。Solarisの.tar.gzファイルでgrepしたい

サンプルファイル:

BD201701.tar.gz

BD201702.tar.gz

BD201703.tar.gz

私はバングラデシュを含む行を検索するためのコマンドの下に使用しています。

zipgrep 'bangladesh' BD2017* 

ただし、以下のエラーが表示されます。

[BD201701.tar.gz] 
End-of-central-directory signature not found. Either this file is not 
a zipfile, or it constitutes one disk of a multi-part archive. In the 
latter case the central directory and zipfile comment will be found on 
the last disk(s) of this archive. 
zipinfo: cannot find zipfile directory in one of BD201701.tar.gz or 
     BD201701.tar.gz.zip, and cannot find BD201701.tar.gz.ZIP, period. 
/usr/bin/zipgrep: test: argument expected 
+0

'.tar.gz'ありません' .zip'、と 'zipgrep 'は' tar.gz 'を明らかにサポートしていません。 –

+0

ファイルから行を探すコマンドを教えてください。 – bKashOST

+0

'tar'を使ってファイルを展開し、' cat'で内容を表示してから 'grep'を使います。 –

答えて

2

zipgrepは、PKZIPアーカイブファイルを処理するために作成されています。 PKZIPアーカイブに圧縮が含まれる各ファイルに個別に適用され、そのプロセスがこののような一連の操作に帰着(実際のないコード!):

foreach file in archive: 
    unzip file to tmpfile 
    grep tmpfile 

圧縮されたtarアーカイブは異なっています。最初に、大量のファイルをアーカイブにパックしてから、圧縮が全体のバンチに適用されます。だから、すなわち、全体のアーカイブをアンパック最初なければならないこと内部で検索するように(再び擬似コード)このような何か:

make and change to temporary directory 
tar -xZf ${archive} 
grep -R ${seachstring} ./ 

しかしtarアーカイブ自体がいくつかと、一緒に「糊付け」ファイルのちょうど束でありますファイル名とサイズの情報だから、単にファイルspearationを無視し、パイプにアーカイブを解凍し、その

zcat file | grep 
1

使用zgrepを検索できます。

zgrep 'bangladesh' BD2017* 
関連する問題