【发布时间】:2021-12-26 22:11:26
【问题描述】:
我正在尝试从已归档的 .tar 文件中的特定 .gz 文件中 grep 字符串。
tar 文件的内容在每个主机上都有一个存档,类似于:
APPLOG/cp13ap011/logs/domeus.log.2021-07-09.gz
APPLOG/cp15ap043/logs/domeus.log.2021-07-09.gz
APPLOG/cp14ap411/logs/domeus.log.2021-07-09.gz
APPLOG/cp11ap231/logs/domeus.log.2021-07-09.gz
我找到了文件位置
find /backup/tmp/ -type f -name 'APPLOG-P10-2021-07-09.tar' |xargs zgrep -F 'communicationId=6700409965' >> ~/tmp/2021_07_09.txt
当我意识到它是一个 .tar 文件时,在演示中保存着记录
tar -tf APPLOG-P10-2021-07-09.tar -O |find APPLOG/ -type f -name 'domeus.log.2021-07-09*' | xargs zgrep -E "Id=6700409965" >> ~/tmp/2021_07_09.txt
文件位于APPLOG/domeus.log.2021-07-09.gz这里有多台机器保存记录,但所有机器都会有一个重复的文件名domeus.log.2021-07-09*并且文件很大,因此需要细化字符串"Id=6700409965"
最终它没有让我得到这些文件的结果
-rw-r--r-- 1 0 Nov 15 16:58 2021_07_09.txt
诀窍,除非没有其他选项,否则我不想解压缩文件
【问题讨论】:
-
tar | find没有意义。find不从标准输入读取,所以它不会看到任何tar正在发送它。 -
高效执行此操作有多重要?如果它非常重要,我会使用不同的语言,例如 Python,其中
tarfile模块让您一次性完成所有这些工作。在 bash 中执行此操作的简单方法包括两次读取输入文件(一次获取可用名称,一次提取具有您关心的特定名称的内容)。 -
@CharlesDuffy,我很想这样做,但我几乎无法在我们的备份上做任何事情
-
我不知道你的意思是:没有访问权限。你的意思是你没有可用的 Python 解释器吗? (这在现代系统上会令人惊讶;Python 已经内置到大多数 Linux 发行版中已有 20 年了)。
-
@MartinSchapendonk,对,问题是 OP 在开始之前是否具有该特定 gz 文件的完整文件名。 (如果他们这样做了,他们为什么要使用
find?)