web-dev-qa-db-ja.com

アーカイブにあるファイル内の文字列をどのように検索しますか?

'grep'コマンドと 'find'コマンドをパイプライン処理することで、特定の文字列について多数のファイルを検索できます。

今、私は約10個のZipファイルを持っており、それぞれが多くのテキストファイルをアーカイブしています。 Zipファイルを抽出せずに、それらすべてのZipファイルにアーカイブされたすべてのテキストファイルで文字列を検索する方法はありますか?

5
Usman
unzip -c \*.Zip | grep yourtext

Grepコマンドでいくつかの正規表現を使用して、文字列照合を微調整できます。

以下のコメントに基づくと、zgrepの方が適しています。

Unzipパッケージに含まれているzipgrepコマンドを使用することもできます。例えば:

for z in *.Zip ; do zipgrep PATTERN $z |sed "s/^/$z: /" ; done

このコマンドは、アーカイブ内の一致したファイル名も提供します。

2
JooMing

[〜#〜] avfs [〜#〜] または Fuse-Zip を使用して、アーカイブをディレクトリとしてマウントします。どちらも Fuse ファイルシステムです。

AVFSは、~/.avfs内のファイルシステムのビューを提供します。ここで、すべてのアーカイブファイルには、同じ名前の関連付けられたディレクトリと、最後に#があります。

mountavfs
grep -r PATTERN ~/.avfs/$PWD/*.Zip\#/
…
unmountavfs

Fuse-ZipはZipをディレクトリにマウントします。

for z in *.Zip; do mkdir "$z.d" && Fuse-Zip "$z" "$z.d"; done
grep -r PATTERN *.Zip.z/
…
fusermount -u *.Zip.d
rmdir *.Zip.d