![无需解压,即可从 tar.gz 文件中读取特定内容文件](https://linux22.com/image/897081/%E6%97%A0%E9%9C%80%E8%A7%A3%E5%8E%8B%EF%BC%8C%E5%8D%B3%E5%8F%AF%E4%BB%8E%20tar.gz%20%E6%96%87%E4%BB%B6%E4%B8%AD%E8%AF%BB%E5%8F%96%E7%89%B9%E5%AE%9A%E5%86%85%E5%AE%B9%E6%96%87%E4%BB%B6.png)
我希望将以下条件的结果写入文件中:
- 在特定的文件夹中,我有很多
tar.gz
文件。 - 每个
tar.gz
文件都包含.dat
子文件夹中的文件。 .dat
如果我在这些文件中找到特定的单词(ERROR24
),我希望获取这些文件的完整路径。tar.gz
无需提取文件即可完成所有操作
我已经找到并测试了下面的一个将结果写入文件的方法,但我不知道如何在文件中查找tar.gz
。
grep -rlw --include="*.dat" -e "ERROR24" /home/tests/logs > /home/files/data/result/listErrors.txt
您能否帮助更新前一个以获得相同的结果但在tar.gz
文件中搜索?
答案1
正如评论中提到的,您需要zgrep
在压缩档案中使用,但是您正在做的是添加-r
到选项列表中,而这不受支持zgrep
Ubuntu 自带的。
-r
用于递归遍历目录树。我们可以用find
命令做同样的事情,并使用标志对找到的每个压缩档案-exec
运行。zgrep
由于我没有您使用的存档示例,因此以下命令仅作为示例。请根据需要进行调整:
find -type f -name "*.tar.gz" -exec zgrep -a "ERROR24" /home/tests/logs > /home/files/data/result/listErrors.txt \;
请注意,-l
这里实际上不能使用,因为它仅列出档案本身的文件名。或者,您可以始终使用zcat
并过滤其输出grep
,但这可能比必要的麻烦更多。
答案2
如果您只想查看存档中的内容,那么只要单击存档,就可以从右键菜单中更改打开的内容或执行的操作。就像重置默认应用程序/操作一样。
我知道对于很多档案来说,现在的默认操作是将其挂载...无论出于什么原因或自动提取。
或者您正在寻找面向命令行的解决方案?