Linux 命令行 - 搜索 tar 存档内的文件

Linux 命令行 - 搜索 tar 存档内的文件

我想检查文件是否在经过 gzip 压缩的 tar 存档中。例如,我想检查 /etc/passwd 是否存在于存档 backup_2010-09-27.tar.gz 中

一个愚蠢的解决方案可能是:

tar -tzf backup_2010-09-27.tar.gz | grep '/etc/passwd'

但这需要时间。有没有更好的解决方案?

答案1

尝试这个(省略初始斜线):

tar -tzf backup_2010-09-27.tar.gz etc/passwd

答案2

它的 gunzipping 过程很耗时,而且在 gunzipping 之前没有办法找到 tar 档案成员。我不知道在列出 tar 时明确指定成员偏移量会有多大帮助,但如果成员查找过程比完整列出更快,那么:

tar -K etc/passwd -tzf backup_2010-09-27.tar.gz| head -1

但我对此表示怀疑。

您还可以尝试提取文件并检查返回代码,这样您就可以摆脱完全列出档案并在之后进行 grepping 的麻烦。

echo etc/passwd | tar -T - -K etc/passwd -Oxzf backup_2010-09-27.tar.gz >/dev/null

$? 应为零

仍然,拉紧拉链....

相关内容