如何在 tar.gz 中的特定文件中 grep 而不解压?

如何在 tar.gz 中的特定文件中 grep 而不解压?

我正在寻找一个可以在 tar.gz 存档中包含的特定文件中执行 grep 操作的命令。

例子:

文件:archive.tar.gz,其中包含:

fileA.txt
fileB.txt
fileC.txt

我只想在 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

相关内容