首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >运维干货:文件高效检索命令行工具fselect详解

运维干货:文件高效检索命令行工具fselect详解

原创
作者头像
小明互联网技术分享社区
发布2025-09-23 08:32:37
发布2025-09-23 08:32:37
18500
代码可运行
举报
文章被收录于专栏:运维运维
运行总次数:0
代码可运行

运维当中查找文件是日常开发和系统管理中非常常见的任务。传统的 findls 命令功能强大,但语法相对复杂,尤其对于初学者来说,学习成本还是比较大的。而 fselect 是一个更加强大的文件查找工具,它参考了 SQL 的语法风格,可以让用户可以用类似数据库查询的方式在文件系统中进行搜索。今天给大家分享一下关于fselect的相关知识,感兴趣的朋友可以看一看!

1、什么是 fselect?

fselect 是一个开源命令行工具,允许你使用类似 SQL 的语法来高效查找文件。当然它并不是要完全取代 findls传统命令行工具,而是给运维人员提供了一种更直观、更高效的方式来完成文件搜索任务。

fselect语法采用了高度宽松的类 SQL 风格,有sql语法经验的朋友直接可以上手,针对小白也可以快速上手。

官网:https://github.com/jhspetersson/fselect

2、fselect 语法格式

代码语言:javascript
代码运行次数:0
运行
复制
SELECT column_list
FROM path
[WHERE condition]
[GROUP BY column]
[ORDER BY column [ASC|DESC]]
[LIMIT n]

格式说明:

SELECT column_list:指定要显示的文件属性(列)。常用的文件属性如下:

  • name:文件名
  • path:完整路径
  • size:文件大小(支持 KB、MB、GB 单位)
  • mtime / atime / ctime:修改时间 / 访问时间 / 创建时间
  • extension:扩展名
  • mime:MIME 类型
  • width / height:图像宽高(仅图片)
  • artist / title:MP3 元数据
  • hash:文件哈希值(如 MD5)

from path:要检索的文件目录。/home/user 指定绝对路径;默认为当前目录。

where condition:设置过滤条件 可选。示例:

代码语言:javascript
代码运行次数:0
运行
复制
WHERE size > 20M -- 文件大于20M
WHERE mtime > '2025-08-06' -- 文件修改时间大于2025-08-06
WHERE name =~ '\.log$' -- 筛选文件名以 .log 结尾的文件
WHERE extension = 'jpg' AND width > 1920 --后缀名为jpg并且 图片宽度大于1920
WHERE mime LIKE 'text%' -- MIME 类型为text

GROUP BY column:按某一字段分组,常用于统计,比如常见的是根据文件后缀名统计数量 可选。

ORDER BY column [ASC|DESC]:根据字段进行排序。可选。

代码语言:javascript
代码运行次数:0
运行
复制
ORDER BY size DESC  -- 根据文件大小降序
ORDER BY mtime ASC  -- 根据文件修改时间升序 

LIMIT n :限制返回搜索文件结果的数量,可选。

3、fselect完整文件属性列表

列名(Column)

含义(Meaning)

说明(Comment)

name

返回文件的名称(包含扩展名)

例如:document.pdf

extension 或 ext

返回文件的扩展名

例如:pdf、jpg、txt

path

返回文件的相对路径

相对于当前目录或查询起点

abspath

返回文件的绝对路径

完整路径,如 /home/user/file.txt

directory 或 dirname 或 dir

返回文件所在的目录路径(相对)

不包含文件名

absdir

返回文件所在目录的绝对路径

完整目录路径

size

返回文件大小(以字节为单位)

整数,如 1024 表示 1KB

fsize 或 hsize

返回带单位的文件大小

格式化输出,如 1.2K、3.5M、2.1G

uid

返回文件所有者的用户 ID

数值型 UID,如 1000

gid

返回文件所属组的组 ID

数值型 GID,如 100

accessed

返回文件最后访问时间

格式:YYYY-MM-DD HH:MM:SS

created

返回文件创建时间

格式:YYYY-MM-DD HH:MM:SS(部分系统如 Windows 支持较好)

modified

返回文件最后修改时间

格式:YYYY-MM-DD HH:MM:SS

is_dir

布尔值,表示该路径是否为目录

true / false

is_file

布尔值,表示该路径是否为普通文件

true / false

is_symlink

布尔值,表示该路径是否为符号链接

true / false

is_pipe 或 is_fifo

布尔值,表示是否为 FIFO 管道文件

常见于 Unix/Linux 系统

is_char 或 is_character

布尔值,表示是否为字符设备文件

如 /dev/tty

is_block

布尔值,表示是否为块设备文件

如 /dev/sda

is_socket

布尔值,表示是否为套接字文件

如 Unix domain socket

is_hidden

布尔值,表示文件是否为隐藏文件

例如 Linux 下以 . 开头的文件

has_xattrs

布尔值,表示文件是否有扩展属性

如 user.comment 等元数据

capabilities 或 caps

返回描述 Linux 能力(capabilities)的字符串

仅 Linux 支持,如 cap_net_bind_service+ep

device

返回文件所在设备的设备编号

仅 Linux 支持,用于区分不同存储设备

inode

返回文件的 inode 编号

仅 Linux/Unix 支持,唯一标识文件

blocks

返回文件占用的数据块数量(每块 256 字节)

仅 Linux 支持

hardlinks

返回文件的硬链接数量

仅 Linux/Unix 支持

mode

返回文件权限(类似 ls -la 的第一列)

如 drwxr-xr-x 或 -rwxr--r--

user

返回文件所有者的用户名

仅在支持用户系统的平台(如 *nix)启用时可用

user_read

布尔值,表示所有者是否可读

权限位检查

user_write

布尔值,表示所有者是否可写

权限位检查

user_exec

布尔值,表示所有者是否可执行

权限位检查

user_all

布尔值,表示所有者是否拥有全部权限(rwx)

相当于 user_read and user_write and user_exec

group

返回文件所属组的组名

仅在支持用户系统的平台启用时可用

group_read

布尔值,表示所属组是否可读

权限位检查

group_write

布尔值,表示所属组是否可写

权限位检查

group_exec

布尔值,表示所属组是否可执行

权限位检查

group_all

布尔值,表示所属组是否拥有全部权限(rwx)

相当于 group_read and group_write and group_exec

other_read

布尔值,表示其他用户是否可读

权限位检查

other_write

布尔值,表示其他用户是否可写

权限位检查

other_exec

布尔值,表示其他用户是否可执行

权限位检查

other_all

布尔值,表示其他用户是否拥有全部权限(rwx)

相当于 other_read and other_write and other_exec

suid

布尔值,表示文件是否设置了 SUID 位

执行时以所有者身份运行

sgid

布尔值,表示文件是否设置了 SGID 位

执行时以组身份运行,或目录继承组

width

返回图像或 MP4 视频的宽度(像素)

依赖图像解析库

height

返回图像或 MP4 视频的高度(像素)

依赖图像解析库

mime

返回文件的 MIME 类型

如 image/jpeg、text/plain、application/pdf

is_binary

布尔值,表示文件内容是否为二进制

基于内容分析

is_text

布尔值,表示文件内容是否为文本

与 is_binary 互斥

line_count

返回文本文件的行数

仅对文本文件有效

exif_datetime

返回照片拍摄的日期和时间

来自 EXIF 元数据

exif_altitude 或 exif_alt

返回照片拍摄时的 GPS 海拔高度

来自 EXIF

exif_latitude 或 exif_lat

返回照片拍摄时的 GPS 纬度

来自 EXIF

exif_longitude 或 exif_lng 或 exif_lon

返回照片拍摄时的 GPS 经度

来自 EXIF

exif_make

返回相机制造商名称

如 Canon、Sony

exif_model

返回相机型号

如 Canon EOS 5D Mark IV

exif_software

返回拍摄或编辑照片所用的软件

如 Adobe Photoshop

exif_version

返回 EXIF 元数据版本

如 2.3

exif_exposure_time 或 exif_exptime

返回曝光时间

如 1/250 秒

exif_aperture

返回光圈值

如 f/2.8

exif_shutter_speed

返回快门速度

如 1/125

exif_f_number 或 exif_f_num

返回 F 值

与光圈相关

exif_iso_speed 或 exif_iso

返回 ISO 感光度

如 800、1600

exif_focal_length 或 exif_focal_len

返回焦距

如 50mm

exif_lens_make

返回镜头制造商

如 Tamron

exif_lens_model

返回镜头型号

如 24-70mm f/2.8

mp3_title 或 title

返回音频文件的标题

来自 ID3 等元数据

mp3_album 或 album

返回音频文件的专辑名

来自元数据

mp3_artist 或 artist

返回音频文件的艺术家

来自元数据

mp3_genre 或 genre

返回音频文件的流派

如 Rock、Jazz

mp3_year

返回音频文件的年份

来自元数据

mp3_freq 或 freq

返回音频或视频的采样率

单位:Hz,如 44100

mp3_bitrate 或 bitrate

返回音频文件的比特率

单位:kbps,如 320

duration

返回音频文件的播放时长

单位:秒

is_shebang

布尔值,表示文件是否以 #! 开头

常用于脚本文件识别

is_empty

布尔值,表示文件是否为空(大小为0)或目录为空

通用判断

is_archive

布尔值,表示是否为归档文件

默认支持 .zip, .tar, .gz 等

is_audio

布尔值,表示是否为音频文件

默认支持 .mp3, .wav, .flac 等

is_book

布尔值,表示是否为电子书文件

默认支持 .epub, .mobi, .pdf 等

is_doc

布尔值,表示是否为文档文件

默认支持 .doc, .pdf, .txt, .odt 等

is_font

布尔值,表示是否为字体文件

默认支持 .ttf, .otf, .woff 等

is_image

布尔值,表示是否为图像文件

默认支持 .jpg, .png, .gif, .webp 等

is_source

布尔值,表示是否为源代码文件

默认支持 .c, .py, .js, .go 等

is_video

布尔值,表示是否为视频文件

默认支持 .mp4, .avi, .mkv, .mov 等

sha1

返回文件的 SHA-1 哈希值

40 位十六进制字符串

sha2_256 或 sha256

返回文件的 SHA-256 哈希值

64 位十六进制字符串

sha2_512 或 sha512

返回文件的 SHA-512 哈希值

128 位十六进制字符串

sha3_512 或 sha3

返回文件的 SHA3-512 哈希值

128 位十六进制字符串

该表格适用于 fselect 的主流版本(v0.9+)。

4、fselect特点

采用类 SQL 语法,使用 SELECT、FROM、WHERE 等关键字构建查询,语法宽松、结构清晰,易于理解和记忆,让文件搜索像操作数据库一样直观。

支持构建包含多个条件的复杂查询,并具备有限的子查询功能,可满足更精细的文件筛选需求。

内置丰富的函数支持,包括聚合函数(如 count、sum、avg)、日期函数、数学函数等,可用于文件统计与条件过滤。

能够搜索压缩归档文件(如 tar、zip)内部的内容,无需手动解压即可定位目标文件。

实验性支持读取并遵循项目中的 .gitignore、.hgignore 和 .dockerignore 文件规则,自动跳过被忽略的路径和文件。

支持根据图像的宽度、高度以及 EXIF 元数据(如拍摄时间、设备型号)进行搜索,适用于多媒体文件管理。

可读取并基于 MP3 文件的 ID3 标签信息(如歌名、艺术家、专辑)进行查询,方便音乐文件整理。

支持根据文件的扩展属性(extended attributes)和 Linux capabilities 进行查找,适用于高级系统管理场景。

支持通过计算文件的哈希值(如 MD5、SHA1)进行匹配搜索,可用于查找重复文件或验证文件完整性。

可根据文件的 MIME 类型(如 image/jpeg、text/plain)进行分类和筛选,提升搜索准确性。

提供常见文件类型的快捷方式(如图片、视频、文档、代码等),简化查询语句编写。

支持交互式模式,用户可在交互环境中逐步输入和调试查询命令,提升使用体验。

支持多种输出格式,包括标准文本、CSV、JSON、HTML 等,便于与其他工具集成或进行数据导出。

5、安装方式

Windows环境下推荐使用scoop方式来安装最简单直接,首先确保安装scoop工具,然后直接打开powershell输入如下命令:

代码语言:javascript
代码运行次数:0
运行
复制
scoop install fselect

目前安装的当前最新版本是0.9.0。安装成功之后效果如下图:

6、实战案例

首先D盘创建一个Test文件夹存放如下文件:

查询全部文件

代码语言:javascript
代码运行次数:0
运行
复制
 fselect *  from D:\Test

查询文件名和文件大小

代码语言:javascript
代码运行次数:0
运行
复制
fselect name,size  from D:\Test

分组统计每种文件类型的文件数量

代码语言:javascript
代码运行次数:0
运行
复制
fselect "extension, count(*)  from D:\Test group by extension order by  count(*) desc" 

查询后缀名为jpg并且高度大于4000的图片

代码语言:javascript
代码运行次数:0
运行
复制
fselect name,width,height from D:\Test where extension=jpg and width>4000

三种格式化输出

代码语言:javascript
代码运行次数:0
运行
复制
fselect name,size, path from D:\Test limit 5 into json
fselect name,size, path from D:\Test limit 5 into csv
fselect name,size, path from D:\Test limit 5 into html

7、总结

以上是关于fselect命令行工具的介绍,该工具非常适合IT运维人员和程序员等办公人员进行文件的高效检索。大家如果使用过程中有啥问题的话,欢迎评论区聊一聊!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、什么是 fselect?
  • 2、fselect 语法格式
  • 3、fselect完整文件属性列表
  • 4、fselect特点
  • 5、安装方式
  • 6、实战案例
  • 7、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档