我有一个系统,它必须全天候接收和发送数据,并在 3 个不同的虚拟机上运行 3 个实例(昵称为 _1、_2、_3 以供日后使用)。在日志中,流量的时间戳以微秒为单位,这意味着任何给定的秒数只能通过从所有 3 个服务器的日志中提取信息来汇总。
现在开始手头的任务:我需要一个命令提示符来:
- 提取所有 .gz 文件 - 我需要的是一个可以成功解压给定文件夹中所有 .gz 文件的命令,请参阅下文
- 找到某个时间戳,如果找到,则将该信息提取到新文件中 - 我需要一些完善的建议,请参见下文
- 根据时间戳将所有文件合并为一个
- 删除所有 0 字节的文件
档案原始名称的示例:gw.2023-02-21-1.log.gz 在 3 个实例中,您将找到一个具有此名称的档案,因此我只需下载带有两个附加字符的档案,即可确定哪个实例是源。 简单来说,所有下载的档案将如下所示:gw.YYYY-MM-DD-S.log_1.gz -> 因此 _1 告诉我它来自实例 1,并且 _2 和 _3 也是如此。 幸运的是,文件的扩展名也会被重命名,因此当我们提取所有内容时无法覆盖。
因此 tar 命令让我失望,并出现“无法识别的存档格式”错误(尝试了
tar -xvzf *locationOFarchive* -C *locationTOextract*
)。我希望找到一种解决方案,将给定文件夹中的所有 .gz 文件提取到同一文件夹中。我使用的命令是这样的:
@find "timestamp" < source file > target file
问题是我有 60 多行这样的命令,因为我必须定义所有源文件和目标文件。是否可以用更简单的方法完成此操作,例如在所有 .log* 文件中查找“timestamp”,如果找到匹配项,则将其写入文件中?我甚至不知道如何开始……
这已经解决了