我想检查文件是否在经过 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
$? 应为零
仍然,拉紧拉链....