654 字
3 分钟
fzf多级文件选择查看日志

引言#

公司的服务部署在linux上,路径大概是这样

logs └── XXX ├── Error │ ├── 2024-12-21 │ ├── 2024-12-22 │ └── 2024-12-23 ├── Info │ ├── 2024-12-21 │ ├── 2024-12-22 │ └── 2024-12-23 └── Debug ├── 2024-12-21 ├── 2024-12-22 └── 2024-12-23

每次线上出问题查看日志都要打一大堆的cd和ls命令,很是麻烦;

于是询问ChatGPT,结果它告诉我有fzf这种神器

本文说明合理运用fzf多次选择XXX Error路径并最终查看日志文件的命令

解决方案#

  • 完整版 直接给出我的一行命令
Terminal window
find /logs -type d -mindepth 1 -maxdepth 1 | fzf --prompt="Select a project: " | xargs -I{} find {} -type d -mindepth 1 -maxdepth 1 | fzf --sync --prompt="Select log level: " | xargs -I{} find {} -printf "%T@ %p\n" | sort -n -r | cut -d' ' -f 2- | fzf --sync --prompt="Select a log file: " --no-clear --preview 'cat {}' | xargs -I{} less {}

这里引用ChatGPT的解析:

1.选择项目目录:

find /logs -type d -mindepth 1 -maxdepth 1 | fzf —prompt=“Select a project: ”

查找 /logs 目录下的一级子目录。

使用 fzf 提供交互式选择。

2.选择日志级别子目录:

xargs -I{} find {} -type d -mindepth 1 -maxdepth 1 | fzf —sync —prompt=“Select log level: ”

根据选定的项目目录,查找其一级子目录。 再次使用 fzf 提供交互式选择。

3.按修改时间排序日志文件:

xargs -I{} find {} -printf “%T@ %p\n” | sort -n -r | cut -d’ ’ -f 2- 查找选定日志级别目录中的所有文件。 使用 -printf “%T@ %p\n” 输出修改时间和路径。 按时间戳倒序排序,并提取文件路径。 4.选择日志文件并预览内容:

关键点:

--sync参数支持多次选择,具体请看参考资料

xargs支持参数传递

把这一行命令直接存入Xshell的快速命令栏,即可迅速查看到服务的对应日志

  • 简易版

假如你的日志文件不是太多,也可使用简易版本

find /logs -type f | sort | fzf --preview 'cat {}' | xargs -I {} less {}

一次搜索预览并 使用less检索日志文件

  • 其它说明-安装方法

    fzf的安装可以参考官方文档

    • 我本机直接 choco安装
    • 家里的测试服务器不支持yum直接安装,因此我选择的是github 源码安装;
    Terminal window
    git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
    ~/.fzf/install
    • 公司的环境没有git不能直接安装;最后我选择的是二进制文件安装

从github release页面下载好对应二进制文件后上传文件到服务器并执行以下命令即可

Terminal window
tar -xvzf fzf-0.57.0-linux_amd64.tar.gz
mv fzf /usr/local/bin
chmod +x /usr/local/bin/fzf

参考资料#

  • ChatGPT
fzf多级文件选择查看日志
https://blog.wangshuai.app/2024-12-24-fzf多级文件选择查看日志/
作者
王帅
发布于
2024-12-24
许可协议
CC BY-NC-SA 4.0