我正在寻找一个可以在 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
。