解凍せずにtar.gzで特定のファイルを見つける方法は?

解凍せずにtar.gzで特定のファイルを見つける方法は?

tar.gzアーカイブに含まれる特定のファイルに対してgrep操作を実行できるコマンドを探しています。

例:

ファイル:archive.tar.gz、これには以下が含まれます。

fileA.txt
fileB.txt
fileC.txt

元のアーカイブからファイルを抽出せずに、1つのコマンドで他の2つではなくfileA.txtからのみgrepしたいと思います。

可能ですか?

私は試した:

for f in /path/*.gz; do
    tar -xzf "$f" --to-command='grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern || true'
done

このコマンドは、アーカイブに含まれるすべてのファイルに対してgrepを実行しますが、まったく必要ではありません。検索したいファイルだけをgrepするコマンドが必要です。

答え1

tarアーカイブでどのファイルを処理する必要があるかを教えてください。

for f in /path/*.gz; do
  tar -xzf "$f" --to-command='grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern || true' fileA.txt
done

fileA.txtコマンドの最後でtar)。

答え2

tarが抽出する必要があるファイルを制限できます。

GNU tarを使用していると仮定した場合は、この--to-stdoutオプションを使用してください。これは、正しく引用されたコマンドを渡すよりも簡単です。

for TAR_ARCHIVE in /path/*.gz; do
  TAR_FILENAME="fileA.txt"
  tar -xzf "$TAR_ARCHIVE" --to-stdout "$TAR_FILENAME" | grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern
done

答え3

ウグレフオプションを使用してtar.gzファイルを検索します-z

関連情報