来自 TAR 输出的 Grep 模式

Grep Pattern From TAR Output

===更新===

@Cyrus 的回答是有效的,但是,这导致了另一个我错过的相关问题。

有一些文件夹在文件夹中包含文件夹,所以 httpdocs/<folder1>/<folder2>/<etc>/index.php 所以 '*' 也在挑选它们。

我真的只想匹配模式 httpdocs/<folder>/index.php

我对 RegEx 很不满意,所以不确定我可以输入什么。有什么想法吗?


我有一个 25GB tar.gz 文件,我想从中提取某些文件。文件位置是:

httpdocs/<account>/index.php

<account> 只是意味着它只是一个名称 - 不是特别重要。

大约有 70 多个 index.php 文件采用这种格式,我只需要从 TAR.

中提取这些文件

我可以像这样针对每个单独的文件执行此操作 (tar -xf site_support_server.com_user-data_1509221232.tgz httpdocs/hotel/index.php),但正如我所说,它们大约有 70 个,我不想一个一个地检查它。

我认为 tar -xf site_support_server.com_user-data_1509221232.tgz httpdocs/*/index.php 可能会起作用,但我认为它无法将“*”识别为通配符。

我是不是遗漏了什么或者其他人对如何快速执行此操作有任何建议?

非常感谢!

您可以在一个命令中列出多个存档成员。这意味着您可以:

tar -tf some.tar.gz | grep '/index.php$' | xargs tar -xf some.tar.gz

注意路径中的空格 - 也许您需要用空字节替换换行符并使用 xargs -0

使用 GNU tar:

tar -xvzf your_file.tgz --wildcards "*/index.php"

更新

tar -tvzf your_file.tgz --wildcards "httpdocs/*/index.php" --exclude="httpdocs/*/*/index.php"