查找帶有類似SQL的查詢的文件
雖然它傾向於完全取代傳統find和ls ,但FSELECT具有以下不錯的功能:
.gitignore , .hgignore和.dockerignore支持(實驗)正在進行更多!
cargo install fselect AUR軟件包,感謝 @asm0dey
Aur bin包,感謝 @4censord
nixpkgs中的fselect ,感謝 @filalex77
用Musl靜態構建。
github下載可用靜態預編譯的二進製文件。
winget install -e --id fselect.fselect choco install fselect scoop install fselect brew install fselect sudo port selfupdate
sudo port install fselect
fselect [ARGS] COLUMN[, COLUMN...] [from ROOT[, ROOT...]] [where EXPR] [group by COLUMNS] [order by COLUMNS] [limit N] [into FORMAT]
fselect -i
更詳細的描述。首先查看示例。
查找臨時或配置文件(完整路徑和大小):
fselect size, path from /home/user where name = '*.cfg' or name = '*.tmp'
Windows用戶可能會省略引號:
fselect size, path from C:Usersuser where name = *.cfg or name = *.tmp
或將所有論點都放在這樣的報價中:
fselect "name from /home/user/tmp where size > 0"
在帶有空格的目錄名稱中搜索(也支持背部):
fselect "name from '/home/user/dir with spaces' where size > 0"
fselect "name from `/home/user/dir with spaces` where size > 0"
或簡單地逃脫單引號:
fselect name from '/home/user/dir with spaces' where size gt 0
指定文件大小,獲取絕對路徑,然後將其添加到結果:
cd /home/user
fselect size, abspath from ./tmp where size gt 2g
fselect fsize, abspath from ./tmp where size = 5m
fselect hsize, abspath from ./tmp where size lt 8k
fselect name, size from ./tmp where size between 5mb and 6mb
更複雜的查詢:
fselect "name from /tmp where (name = *.tmp and size = 0) or (name = *.cfg and size > 1000000)"
聚合功能(如果需要的話,您可以使用捲曲括號,甚至將它們與常規括號結合在一起):
fselect "MIN(size), MAX{size}, AVG(size), SUM{size}, COUNT(*) from /home/user/Downloads"
格式化功能:
fselect "LOWER(name), UPPER(name), LENGTH(name), YEAR(modified) from /home/user/Downloads"
獲取最古老的文件年:
fselect "MIN(YEAR(modified)) from /home/user"
如果需要用空格地址文件,請使用單個引號:
fselect "path from '/home/user/Misc stuff' where name != 'Some file'"
支持生鏽風味的正則表達:
fselect name from /home/user where path =~ '.*Rust.*'
否定正則表達式:
fselect "name from . where path !=~ '^./config'"
簡單的地球自動擴展並與= and !=運算符:
fselect name from /home/user where path = '*Rust*'
經典類似:
fselect "path from /home/user where name like '%report-2018-__-__???'"
確切的匹配運算符可在禁用Regexps的情況下進行搜索:
fselect "path from /home/user where name === 'some_*_weird_*_name'"
按日期查找文件:
fselect path from /home/user where created = 2017-05-01
fselect path from /home/user where modified = today
fselect path from /home/user where accessed = yesterday
fselect "path from /home/user where modified = 'apr 1'"
fselect "path from /home/user where modified = 'last fri'"
更具體地匹配在下午3點至下午4點之間以間隔創建的所有文件:
fselect path from /home/user where created = '2017-05-01 15'
甚至更具體:
fselect path from /home/user where created = '2017-05-01 15:10'
fselect path from /home/user where created = '2017-05-01 15:10:30'
可能的日期和時間間隔(自5月1日以來找到更新的所有內容):
fselect path from /home/user where modified gte 2017-05-01
默認值是當前目錄:
fselect path, size where name = '*.jpg'
在多個位置搜索:
fselect path from /home/user/oldstuff, /home/user/newstuff where name = '*.jpg'
指定的最小和/或最大深度( depth是maxdepth的同義詞):
fselect path from /home/user/oldstuff depth 5 where name = '*.jpg'
fselect path from /home/user/oldstuff mindepth 2 maxdepth 5, /home/user/newstuff depth 10 where name = '*.jpg'
可選地遵循Symlinks:
fselect path, size from /home/user symlinks where name = '*.jpg'
在檔案中搜索(目前僅支持ZIP-Archives):
fselect path, size from /home/user archives where name = '*.jpg'
或組合:
fselect size, path from /home/user depth 5 archives symlinks where name = '*.jpg' limit 100
啟用.gitignore或.hgignore支持:
fselect size, path from /home/user/projects gitignore where name = '*.cpp'
fselect size, path from /home/user/projects git where name = '*.cpp'
fselect size, path from /home/user/projects hgignore where name = '*.py'
按圖像尺寸進行搜索:
fselect CONCAT(width, 'x', height), path from /home/user/photos where width gte 2000 or height gte 2000
查找正方形圖像:
fselect path from /home/user/Photos where width = height
查找具有已知名稱部分但未知擴展名的圖像:
fselect path from /home/user/projects where name = "*RDS*" and width gte 1
查找老式RAP MP3文件:
fselect duration, path from /home/user/music where genre = Rap and bitrate = 320 and mp3_year lt 2000
通用文件擴展名的快捷方式:
fselect path from /home/user where is_archive = true
fselect path, mime from /home/user where is_audio = 1
fselect path, mime from /home/user where is_book != false
使用布爾列的更簡單方法:
fselect path from /home/user where is_doc
fselect path from /home/user where is_image
fselect path from /home/user where is_video
查找具有危險權限的文件:
fselect mode, path from /home/user where other_write or other_exec
fselect mode, path from /home/user where other_all
在文件模式下,簡單的類似亮度的表達式甚至是正則表達式:
fselect mode, path from /home/user where mode = '*rwx'
fselect mode, path from /home/user where mode =~ '.*rwx$'
通過所有者的UID或GID查找文件:
fselect uid, gid, path from /home/user where uid != 1000 or gid != 1000
或以所有者或集團的姓名:
fselect user, group, path from /home/user where user = mike or group = mike
查找特殊文件:
fselect name from /usr/bin where suid
fselect path from /tmp where is_pipe
fselect path from /tmp where is_socket
使用XATTRS查找文件,檢查是否存在特定的XATTR,或獲取其值:
fselect "path, has_xattrs, has_xattr(user.test), xattr(user.test) from /home/user"
將任意文本包括為列:
fselect "name, ' has size of ', size, ' bytes'"
組結果:
fselect "ext, count(*) from /tmp group by ext"
訂單結果:
fselect path from /tmp order by size desc, name
fselect modified, fsize, path from ~ order by 1 desc, 3
最終限制了結果:
fselect name from /home/user/samples limit 5
格式輸出:
fselect size, path from /home/user limit 5 into json
fselect size, path from /home/user limit 5 into csv
fselect size, path from /home/user limit 5 into html
MIT/Apache-2.0
由Jetbrains Ideas開源許可證支持