[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5853":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":15,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":23,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":37,"readmeContent":38,"aiSummary":39,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":40,"discoverSource":41},5853,"fselect","jhspetersson\u002Ffselect","jhspetersson","Find files with SQL-like queries","https:\u002F\u002Ffselect.rocks",null,"Rust",4450,87,37,6,0,2,17,27.83,"Apache License 2.0",false,"master",true,[25,26,27,28,29,30,31,32,33,34,35,36],"cli","command-line","files","filesystem","find","hacktoberfest","query","rust","sql","sql-like","tool","utility","2026-06-12 02:01:15","# fselect\nFind files with SQL-like queries\n\n[![Crates.io](https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Ffselect.svg)](https:\u002F\u002Fcrates.io\u002Fcrates\u002Ffselect)\n[![build](https:\u002F\u002Fgithub.com\u002Fjhspetersson\u002Ffselect\u002Factions\u002Fworkflows\u002Frust.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fjhspetersson\u002Ffselect\u002Factions\u002Fworkflows\u002Frust.yml)\n\n### Why use fselect?\n\nWhile it doesn't tend to fully replace traditional `find` and `ls`, **fselect** has these nice features:\n\n* SQL-like (not real SQL, but highly relaxed!) grammar easily understandable by humans\n* complex queries, compare results in several directories with [subqueries](docs\u002Fusage.md#subqueries-for-in-and-exists)\n* aggregate, statistics, date, and other [functions](docs\u002Fusage.md#functions)\n* search within archives\n* `.gitignore`, `.hgignore`, and `.dockerignore` support (experimental)\n* search by width and height of images, EXIF metadata\n* search by MP3 info\n* search by extended file attributes, POSIX ACLs, and Linux capabilities\n* search by file hashes\n* search by MIME type\n* shortcuts to common file types\n* [interactive mode](docs\u002Fusage.md#interactive-mode)\n* various output formatting (CSV, JSON, and others)\n\nMore is under way!\n\n### Installation\n\n#### Latest release from source\n\n* Install [Rust with Cargo](https:\u002F\u002Fwww.rust-lang.org\u002Fen-US\u002Finstall.html) and its dependencies to build a binary\n* Run `cargo install fselect`\n\n#### Debian\u002FUbuntu\n\n[deb package](https:\u002F\u002Fgithub.com\u002Fjhspetersson\u002Ffselect\u002Freleases\u002Fdownload\u002F0.10.0\u002Ffselect_0.10.0-1_amd64.deb)\n\n#### Arch Linux\n\n[AUR package](https:\u002F\u002Faur.archlinux.org\u002Fpackages\u002Ffselect\u002F), thanks to [@asm0dey](https:\u002F\u002Fgithub.com\u002Fasm0dey)\n\n[AUR bin package](https:\u002F\u002Faur.archlinux.org\u002Fpackages\u002Ffselect-bin\u002F), thanks to [@4censord](https:\u002F\u002Fgithub.com\u002F4censord)\n\n#### NixOS\n\n[`fselect` in `nixpkgs`](https:\u002F\u002Fgithub.com\u002Ffilalex77\u002Fnixpkgs\u002Fblob\u002F1eced92263395896c10cea69e5f60e8be5f43aeb\u002Fpkgs\u002Ftools\u002Fmisc\u002Ffselect\u002Fdefault.nix), thanks to [@filalex77](https:\u002F\u002Fgithub.com\u002Ffilalex77)\n\n#### Other Linux\n\n[Static build with musl](https:\u002F\u002Fgithub.com\u002Fjhspetersson\u002Ffselect\u002Freleases\u002Fdownload\u002F0.10.0\u002Ffselect-x86_64-linux-musl.gz).\n\n#### Windows 64bit\n\nA statically precompiled [binary](https:\u002F\u002Fgithub.com\u002Fjhspetersson\u002Ffselect\u002Freleases\u002Fdownload\u002F0.10.0\u002Ffselect-x86_64-win.zip) is available at GitHub downloads.\n\n#### Windows via winget\n\n* Install [winget](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwinget-cli)\n* Run `winget install -e --id fselect.fselect`\n\n#### Windows via Chocolatey\n\n* Install [Chocolatey](https:\u002F\u002Fchocolatey.org\u002Finstall)\n* Run `choco install fselect`\n\n#### Windows via Scoop\n\n* Install [Scoop](https:\u002F\u002Fscoop.sh)\n* Run `scoop install fselect`\n\n#### Mac via Homebrew\n\n* Install [brew](https:\u002F\u002Fbrew.sh)\n* Run `brew install fselect`\n\n#### Mac via MacPorts\n\n* Install [MacPorts](https:\u002F\u002Fwww.macports.org)\n* Run:\n  ```\n  sudo port selfupdate\n  sudo port install fselect\n  ```\n\n### Usage\n\n    fselect [ARGS] COLUMN[, COLUMN...] [from ROOT[, ROOT...]] [where EXPR] [group by COLUMNS] [order by COLUMNS] [limit N] [offset N] [into FORMAT]\n\n### Interactive mode\n\n    fselect -i\n\n### Documentation\n\n[Detailed description of all the supported features.](docs\u002Fusage.md)\n\n### Examples\n\nFind temporary or config files (full path and size):\n\n    fselect size, path from \u002Fhome\u002Fuser where name = '*.cfg' or name = '*.tmp'\n    \nWindows users may omit the quotes:\n\n    fselect size, path from C:\\Users\\user where name = *.cfg or name = *.tmp\n\nOr put all the arguments into the quotes like this:\n\n    fselect \"name from \u002Fhome\u002Fuser\u002Ftmp where size > 0\"\n\nSearch within a directory name with spaces (backticks are also supported):\n\n    fselect \"name from '\u002Fhome\u002Fuser\u002Fdir with spaces' where size > 0\"\n    fselect \"name from `\u002Fhome\u002Fuser\u002Fdir with spaces` where size > 0\"\n\nOr simply escape the single quote:\n\n    fselect name from \\'\u002Fhome\u002Fuser\u002Fdir with spaces\\' where size gt 0\n\nSpecify the file size, get an absolute path, and add it to the results:\n\n    cd \u002Fhome\u002Fuser\n    fselect size, abspath from .\u002Ftmp where size gt 2g\n    fselect fsize, abspath from .\u002Ftmp where size = 5m\n    fselect hsize, abspath from .\u002Ftmp where size lt 8k\n    fselect name, size from .\u002Ftmp where size between 5mb and 6mb\n    \nMore complex query:\n\n    fselect \"name from \u002Ftmp where (name = *.tmp and size = 0) or (name = *.cfg and size > 1000000)\"\n\nYou can use subqueries:\n\n    fselect \"name from \u002Ftest1 where size > 100 and size in (select size from \u002Ftest2 where name in (select name from \u002Ftest3 where modified in (select modified from \u002Ftest4 where size \u003C 200)))\"\n    fselect \"name, path, size from \u002Fdata as data where exists (select * from \u002Fbackup as backup where backup.name = data.name)\"\n    \nAggregate functions (you can use curly braces if you want and even combine them with the regular parentheses):\n\n    fselect \"MIN(size), MAX{size}, AVG(size), SUM{size}, COUNT(*) from \u002Fhome\u002Fuser\u002FDownloads\"\n    \nFormatting functions:\n\n    fselect \"LOWER(name), UPPER(name), LENGTH(name), YEAR(modified) from \u002Fhome\u002Fuser\u002FDownloads\"\n    \nGet the year of the oldest file:\n\n    fselect \"MIN(YEAR(modified)) from \u002Fhome\u002Fuser\"\n    \nUse single quotes if you need to address files with spaces:\n\n    fselect \"path from '\u002Fhome\u002Fuser\u002FMisc stuff' where name != 'Some file'\"\n    \nRegular expressions of [Rust flavor](https:\u002F\u002Fdocs.rs\u002Fregex\u002F1.1.0\u002Fregex\u002F#syntax) are supported:\n\n    fselect name from \u002Fhome\u002Fuser where path =~ '.*Rust.*'\n    \nNegate regular expressions:\n\n    fselect \"name from . where path !=~ '^\\.\u002Fconfig'\"\n    \nSimple globs expand automatically and work with `=` and `!=` operators:\n\n    fselect name from \u002Fhome\u002Fuser where path = '*Rust*'\n    \nClassic LIKE:\n\n    fselect \"path from \u002Fhome\u002Fuser where name like '%report-2018-__-__???'\"\n    \nExact match operators to search with regexps disabled:\n\n    fselect \"path from \u002Fhome\u002Fuser where name === 'some_*_weird_*_name'\"\n    \nFind files by date:\n\n    fselect path from \u002Fhome\u002Fuser where created = 2017-05-01\n    fselect path from \u002Fhome\u002Fuser where modified = today\n    fselect path from \u002Fhome\u002Fuser where accessed = yesterday\n    fselect \"path from \u002Fhome\u002Fuser where modified = 'apr 1'\"\n    fselect \"path from \u002Fhome\u002Fuser where modified = 'last fri'\"\n    \nBe more specific to match all files created at an interval between 3PM and 4PM:\n\n    fselect path from \u002Fhome\u002Fuser where created = '2017-05-01 15'\n    \nAnd even more specific:\n\n    fselect path from \u002Fhome\u002Fuser where created = '2017-05-01 15:10'\n    fselect path from \u002Fhome\u002Fuser where created = '2017-05-01 15:10:30'\n    \nDate and time intervals are possible (find everything updated since May 1st):\n\n    fselect path from \u002Fhome\u002Fuser where modified gte 2017-05-01\n    \nDefault is the current directory:\n\n    fselect path, size where name = '*.jpg'\n    \nSearch within multiple locations:\n\n    fselect path from \u002Fhome\u002Fuser\u002Foldstuff, \u002Fhome\u002Fuser\u002Fnewstuff where name = '*.jpg'\n    \nWith minimum and\u002For maximum depth specified (`depth` is a synonym for `maxdepth`):\n\n    fselect path from \u002Fhome\u002Fuser\u002Foldstuff depth 5 where name = '*.jpg'\n    fselect path from \u002Fhome\u002Fuser\u002Foldstuff mindepth 2 maxdepth 5, \u002Fhome\u002Fuser\u002Fnewstuff depth 10 where name = '*.jpg'\n\nOptionally follow symlinks:\n\n    fselect path, size from \u002Fhome\u002Fuser symlinks where name = '*.jpg'\n    \nSearch within archives (currently only zip-archives are supported):\n\n    fselect path, size from \u002Fhome\u002Fuser archives where name = '*.jpg'\n    \nOr in combination:\n\n    fselect size, path from \u002Fhome\u002Fuser depth 5 archives symlinks where name = '*.jpg' limit 100\n\nEnable `.gitignore` or `.hgignore` support:\n\n    fselect size, path from \u002Fhome\u002Fuser\u002Fprojects gitignore where name = '*.cpp'\n    fselect size, path from \u002Fhome\u002Fuser\u002Fprojects git where name = '*.cpp'    \n    fselect size, path from \u002Fhome\u002Fuser\u002Fprojects hgignore where name = '*.py'        \n    \nSearch by image dimensions:\n\n    fselect CONCAT(width, 'x', height), path from \u002Fhome\u002Fuser\u002Fphotos where width gte 2000 or height gte 2000\n    \nFind square images:\n    \n    fselect path from \u002Fhome\u002Fuser\u002FPhotos where width = height\n\nFind images with a known name part but unknown extension:\n    \n    fselect path from \u002Fhome\u002Fuser\u002Fprojects where name = \"*RDS*\" and width gte 1\n\nFind old-school rap MP3 files:\n\n    fselect duration, path from \u002Fhome\u002Fuser\u002Fmusic where genre = Rap and bitrate = 320 and mp3_year lt 2000  \n    \nShortcuts to common file extensions:\n\n    fselect path from \u002Fhome\u002Fuser where is_archive = true\n    fselect path, mime from \u002Fhome\u002Fuser where is_audio = 1\n    fselect path, mime from \u002Fhome\u002Fuser where is_book != false\n\nEven simpler way of using boolean columns:\n\n    fselect path from \u002Fhome\u002Fuser where is_doc\n    fselect path from \u002Fhome\u002Fuser where is_image\n    fselect path from \u002Fhome\u002Fuser where is_video\n    \nFind files with dangerous permissions:\n    \n    fselect mode, path from \u002Fhome\u002Fuser where other_write or other_exec\n    fselect mode, path from \u002Fhome\u002Fuser where other_all\n    \nSimple glob-like expressions or even regular expressions in file mode are possible:\n    \n    fselect mode, path from \u002Fhome\u002Fuser where mode = '*rwx'\n    fselect mode, path from \u002Fhome\u002Fuser where mode =~ '.*rwx$'\n    \nFind files by owner's uid or gid:\n\n    fselect uid, gid, path from \u002Fhome\u002Fuser where uid != 1000 or gid != 1000\n    \nOr by owner's or group's name:\n\n    fselect user, group, path from \u002Fhome\u002Fuser where user = mike or group = mike\n\nFind special files:\n\n    fselect name from \u002Fusr\u002Fbin where suid\n    fselect path from \u002Ftmp where is_sticky\n    fselect path from \u002Ftmp where is_pipe\n    fselect path from \u002Ftmp where is_socket\n    \nFind files with xattrs, check if a particular xattr exists, or get its value:\n\n    fselect \"path, has_xattrs, has_xattr(user.test), xattr(user.test) from \u002Fhome\u002Fuser\"\n    \nInclude arbitrary text as columns:\n\n    fselect \"name, ' has size of ', size, ' bytes'\"\n\nGroup results:\n\n    fselect \"ext, count(*) from \u002Ftmp group by ext\"            \n\nOrder results:\n\n    fselect path from \u002Ftmp order by size desc, name\n    fselect modified, fsize, path from ~ order by 1 desc, 3\n    \nFinally, limit the results:\n\n    fselect name from \u002Fhome\u002Fuser\u002Fsamples limit 5 \n    \nFormat output:\n\n    fselect size, path from \u002Fhome\u002Fuser limit 5 into json\n    fselect size, path from \u002Fhome\u002Fuser limit 5 into csv\n    fselect size, path from \u002Fhome\u002Fuser limit 5 into html\n\n### License\n\nMIT\u002FApache-2.0\n\n---\n\nSupported by [JetBrains IDEA](https:\u002F\u002Fjb.gg\u002FOpenSourceSupport) open source license\n","fselect 是一个使用类似 SQL 查询来查找文件的命令行工具。它支持复杂的查询、子查询以及多种聚合和统计函数，能够搜索文件系统中的文件，并提供对归档文件、图片元数据、MP3 信息等高级搜索功能。该工具采用 Rust 语言编写，具备跨平台特性，支持 Linux、Windows 和 macOS 系统。fselect 适用于需要高效且灵活地管理和检索大量文件的场景，特别适合开发者和系统管理员在日常工作中使用。","2026-06-11 03:05:12","top_language"]