小工具:FQL 转

http://blog.dccmx.com/2011/08/fql/

小工具:FQL

常在Linux下工作,偶尔要找些文件,面对find工具的各种参数,只是偶尔用一下的我表示鸭梨很大。每次都要man或者google,伤不起啊。

好吧,我怒了,不能忍,于是我决定写个工具,用sql语句来操作文件,名字就山寨一点,叫fql(File Query Language)吧。技术上用了ragel做词法分析,lemon做语法分析。

项目托管在http://code.google.com/p/fql

稍微介绍一下。

这个小工具把所有的文件夹当做一张表,文件的属性如名称、大小、修改时间等作为列。每个文件就是一行。

于是可以这样:select name,size from /usr/local/bin where size>10k and time>=’2011-8-8′.你懂的。

不过为了与’ls -al’保持一致,这里’*'并不是表示所有列,而是表示’权限、用户名、组名、大小、修改日期、文件名’的缩写。

于是有这样的效果:

1
2
3
4
5
dccmx@~/projects/fql$ ./fql "select * where size > 4.1k and size < 100k"
-rw-r--r-- dccmx dccmx 12.8K 2011-08-02 08:38:03 lexer-rl.cc
-rw-r--r-- dccmx dccmx 19.9K 2011-08-01 10:40:35 parser.out
-rw-r--r-- dccmx dccmx 41.3K 2011-08-02 08:38:53 parser.cc
-rw-r--r-- dccmx dccmx  5.6K 2011-08-02 16:03:54 variant.h


还有这样的效果:

 

1
2
3
4
5
6
7
8
9
10
dccmx@~/projects/fql$ ./fql "select inode,* where name like '.*\.cc'"
265734 -rw-r--r-- 1 dccmx dccmx  2.3K 2011-08-09 02:51:46 expr.cc
265562 -rw-r--r-- 1 dccmx dccmx   665 2011-08-01 08:35:04 lexer.cc
265561 -rw-r--r-- 1 dccmx dccmx 13.6K 2011-08-09 06:58:48 lexer-rl.cc
265651 -rw-r--r-- 1 dccmx dccmx  2.2K 2011-08-09 07:00:15 sys.cc
265783 -rw-r--r-- 1 dccmx dccmx  1.4K 2011-08-02 08:38:03 fql.cc
265731 -rw-r--r-- 1 dccmx dccmx  2.8K 2011-08-09 06:53:31 table.cc
265750 -rw-r--r-- 1 dccmx dccmx 41.7K 2011-08-09 06:58:48 parser.cc
265559 -rw-r--r-- 1 dccmx dccmx   912 2011-08-02 16:37:22 ast.cc
265785 -rw-r--r-- 1 dccmx dccmx  4.2K 2011-08-09 06:58:46 variant.cc

对于多文件夹的select,我还没有想好是做联合查询还是简单的同时查询多个文件夹,因为文件夹与文件夹之间没什么关联,感觉联合查询没什么用。

由于还没有完全测试,加上还有些功能没实现,所依没放到download里面,需要从svn里签出来编译。等全搞定之后,就可以抛弃find了,神清气爽啊。

相关文章:

原文地址:https://www.cnblogs.com/lexus/p/2247500.html