Top Related Projects
:cherry_blossom: A command-line fuzzy finder
A simple, fast and user-friendly alternative to 'find'
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
A code-searching tool similar to ack, but faster.
Fuzzy Finder in rust!
The next gen ls command
Quick Overview
FSearch is a fast file search utility for Unix-like systems, designed to provide quick and efficient file searching capabilities. It offers a GTK+-based graphical user interface and aims to be a faster alternative to other search tools like the find
command.
Pros
- Extremely fast search performance, especially for large file systems
- User-friendly graphical interface
- Supports regular expressions and various search filters
- Lightweight and resource-efficient
Cons
- Limited to Unix-like systems (not available for Windows)
- May require initial database build-up, which can take time on large file systems
- Less feature-rich compared to some advanced search tools
- Requires GTK+ dependencies, which may not be ideal for all users
Getting Started
To get started with FSearch:
-
Install dependencies:
sudo apt-get install git build-essential cmake libgtk-3-dev libglib2.0-dev libpcre3-dev
-
Clone the repository:
git clone https://github.com/cboxdoerfer/fsearch.git
-
Build and install:
cd fsearch mkdir build && cd build cmake .. make sudo make install
-
Run FSearch:
fsearch
After installation, launch FSearch and allow it to build its database. Once complete, you can start searching for files using the search bar in the graphical interface.
Competitor Comparisons
:cherry_blossom: A command-line fuzzy finder
Pros of fzf
- Highly versatile, can be used for file search, command history, and more
- Lightweight and fast, with minimal dependencies
- Extensive integration with various tools and shells
Cons of fzf
- Command-line interface may be less intuitive for some users
- Requires more setup and configuration for optimal use
- Limited built-in file management features
Code Comparison
fzf (command-line usage):
find * -type f | fzf > selected
fsearch (C code snippet):
void
fsearch_application_startup(GApplication *application)
{
FsearchApplication *self = FSEARCH_APPLICATION(application);
fsearch_window_new(self);
}
Key Differences
- fsearch is a dedicated file search tool with a graphical interface, while fzf is a general-purpose fuzzy finder primarily used in the command line
- fsearch focuses on file system searches, whereas fzf can be used for various data sources
- fzf is more flexible and can be integrated into various workflows, while fsearch provides a more user-friendly interface for file searching
Use Cases
- fsearch: Better suited for users who prefer a graphical interface and primarily need file search functionality
- fzf: Ideal for power users, developers, and those who work extensively in the command line and require a versatile fuzzy finding tool
A simple, fast and user-friendly alternative to 'find'
Pros of fd
- Written in Rust, offering better performance and memory safety
- Supports colored output and parallel command execution
- More extensive command-line options for fine-tuned searches
Cons of fd
- Lacks a graphical user interface
- May require more setup for non-technical users
- Limited to command-line usage, which can be less intuitive for some
Code Comparison
fd:
let regex = RegexBuilder::new(&pattern)
.case_insensitive(true)
.build()
.unwrap();
FSearch:
GRegex *regex = g_regex_new(pattern,
G_REGEX_CASELESS,
0,
NULL);
Key Differences
- fd is a command-line tool, while FSearch provides a graphical interface
- fd focuses on speed and efficiency, FSearch on user-friendliness
- fd offers more advanced search options, FSearch is simpler to use for beginners
Use Cases
- fd: Ideal for developers and power users comfortable with command-line tools
- FSearch: Better suited for general users who prefer a visual interface for file searching
Community and Development
- fd: More active development, larger community, and frequent updates
- FSearch: Smaller community, less frequent updates, but still maintained
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
Pros of ripgrep
- Extremely fast search performance, especially for large codebases
- Supports searching compressed files and archives
- Respects .gitignore rules by default
Cons of ripgrep
- Command-line interface may be less intuitive for non-technical users
- Lacks a graphical user interface
- Primarily focused on text search, not general file search
Code comparison
fsearch:
static void fsearch_application_startup(GApplication *application) {
FsearchApplication *self = FSEARCH_APPLICATION(application);
fsearch_application_init_resources(self);
fsearch_application_activate(application);
}
ripgrep:
fn main() -> Result<(), Box<dyn Error>> {
let args = Cli::parse();
let printer = StandardBuilder::new()
.build(&args.color_choice())?;
run(args, printer)
}
Summary
fsearch is a GTK-based file search utility with a graphical interface, while ripgrep is a command-line search tool focused on speed and efficiency. fsearch offers a more user-friendly experience for general file searching, while ripgrep excels in fast text searches within large codebases and supports advanced features like searching compressed files. The choice between them depends on the user's needs and technical proficiency.
A code-searching tool similar to ack, but faster.
Pros of The Silver Searcher
- Faster search performance, especially for large codebases
- Supports a wider range of programming languages and file types
- More advanced search options and regular expression support
Cons of The Silver Searcher
- Command-line interface only, lacking a graphical user interface
- Requires installation and configuration, which may be challenging for some users
- Limited file management capabilities compared to FSearch
Code Comparison
The Silver Searcher:
void* search_thread(void* arg) {
int i;
work_queue_t* queue_item;
pthread_mutex_lock(&work_queue_mtx);
while (TRUE) {
queue_item = queue_pop();
FSearch:
static gpointer
search_thread (gpointer user_data)
{
SearchThreadData *data = user_data;
FsearchThreadPool *pool = data->pool;
guint thread_id = data->thread_id;
Both projects use multi-threading for search operations, but The Silver Searcher's implementation appears more low-level, using POSIX threads directly. FSearch, on the other hand, utilizes GLib's thread pool functionality, which provides a higher-level abstraction.
The Silver Searcher focuses on fast, command-line based searching across multiple file types, while FSearch offers a graphical interface and more comprehensive file management features. The choice between them depends on user preferences and specific use cases.
Fuzzy Finder in rust!
Pros of skim
- Written in Rust, offering better performance and memory safety
- More versatile, can be used as a general-purpose fuzzy finder for various data sources
- Highly customizable with extensive configuration options
Cons of skim
- Primarily a command-line tool, lacking a graphical user interface
- May have a steeper learning curve for non-technical users
- Less focused on file system searching compared to FSearch
Code comparison
skim (Rust):
pub fn run(&mut self) -> i32 {
self.read_options();
self.create_model();
self.create_interface();
self.event_loop()
}
FSearch (C):
int main(int argc, char *argv[]) {
FsearchApplication *app = fsearch_application_new();
return g_application_run(G_APPLICATION(app), argc, argv);
}
Summary
skim is a versatile fuzzy finder written in Rust, offering high performance and customization. It's primarily command-line based and can be used for various data sources. FSearch, on the other hand, is a dedicated file search utility with a graphical interface, making it more accessible for general users but potentially less flexible for advanced use cases.
The next gen ls command
Pros of lsd
- Written in Rust, offering better performance and memory safety
- Provides colorful and detailed file listings with icons
- Supports various view options like tree view and grid layout
Cons of lsd
- Focused solely on file listing, lacks search functionality
- May have a steeper learning curve for users unfamiliar with command-line tools
Code Comparison
lsd (Rust):
pub fn print_dir(dir: &Path, options: &Options) -> io::Result<()> {
let mut files = read_dir(dir, options)?;
files.sort_by(|a, b| a.name().cmp(b.name()));
for file in files {
println!("{}", file.display(options));
}
Ok(())
}
FSearch (C):
static void
db_search_results_update(DynamicArray *results, uint32_t num_results, void *data)
{
FsearchApplication *self = (FsearchApplication *)data;
g_mutex_lock(&self->mutex);
self->num_results = num_results;
self->results = results;
g_mutex_unlock(&self->mutex);
}
Summary
lsd is a modern file listing tool with a focus on aesthetics and detailed information, while FSearch is a powerful file search utility. lsd excels in providing visually appealing directory listings, whereas FSearch offers robust search capabilities for locating files quickly. The choice between the two depends on whether the user prioritizes enhanced file listing or efficient file searching functionality.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
FSearch is a fast file search utility, inspired by Everything Search Engine. It's written in C and based on GTK3.
- For bug reports and feature requests please use the issue tracker: https://github.com/cboxdoerfer/fsearch/issues
- For discussions and questions about FSearch use the discussion forum: https://github.com/cboxdoerfer/fsearch/discussions
- For everything else related to FSearch you can talk to me on Matrix: https://matrix.to/#/#fsearch:matrix.org
Features
- Instant (as you type) results
- Advanced search syntax
- Wildcard support
- RegEx support
- Filter support (only search for files, folders or everything)
- Include and exclude specific folders to be indexed
- Ability to exclude certain files/folders from index using wildcard expressions
- Fast sort by filename, path, size or modification time
- Customizable interface (e.g., switch between traditional UI with menubar and client-side decorations)
Requirements
- GTK 3.18
- GLib 2.50
- glibc 2.19 or musl 1.1.15 (other C standard libraries might work too, those are just the ones I verified)
- PCRE2 (libpcre2)
- ICU 3.8
Download
It is recommended to install FSearch from one of the Stable packages, unless you know what you're doing.
The Development packages are primarily intended for testing and adventurous users.
Distribution | Stable | Development |
---|---|---|
Ubuntu | PPA Stable | PPA Daily |
Arch Linux | AUR | AUR (git) |
Fedora/RHEL/CentOS | COPR Stable | COPR Nightly |
Debian | OpenBuildService | |
openSUSE | OpenBuildService | |
Flatpak (limited features) | Flathub | |
Solus* | Solus Repository | |
FreeBSD* | FreshPorts |
(*) Not maintained by me
Roadmap
https://github.com/cboxdoerfer/fsearch/wiki/Roadmap
Build Instructions
https://github.com/cboxdoerfer/fsearch/wiki/Build-instructions
Localization
The localization of FSearch is managed with Weblate.
https://hosted.weblate.org/projects/fsearch/
If you want to contribute translations please submit them there, instead of opening pull requests on GitHub. This also includes any suggestions to the English texts â English isn't my first language, so there are likely errors and unusual wordings.
Instructions can be found here: https://docs.weblate.org/en/latest/user/basic.html
And of course: Thank you for taking the time to translate FSearch!
Current Limitations
- Sorting lots of results by Type can be very slow, since gathering that information is expensive, and the data isn't indexed. This also means that when the view is sorted by Type, searching will reset the sort order to Name.
- Using the Move to Trash option doesn't update the database index, so trashed files/folders show up in the result list as if nothing happened to them.
Why yet another search utility?
Performance. On Windows I really like to use Everything Search Engine. It provides instant results as you type for all your files and lots of useful features (regex, filters, bookmarks, ...). On Linux I couldn't find anything that's even remotely as fast and powerful.
Before I started working on FSearch, I took a look at existing solutions. I tried MATE Search Tool (formerly GNOME Search Tool), Recoll, Krusader (locate based search), SpaceFM File Search, Nautilus, ANGRYsearch and Catfish, to find out whether it makes sense to improve those. However, they're not exactly what I was looking for:
- standalone application (not part of a file manager)
- written in a language with C like performance
- no dependencies to any specific desktop environment
- Qt5 or GTK3 based
- small memory usage (both hard drive and RAM)
- target audience: advanced users
Looking for a command line interface?
I highly recommend fzf or the obvious tools: find and (m)locate
Why GTK3 and not Qt5?
I like both of them, and my long term goal is to provide console, GTK3 and Qt5 interfaces, or at least make it easy for others to build those. However, for the time being it's only GTK3 because I like C more than C++, and I'm more familiar with GTK development.
Questions?
Email: christian.boxdoerfer[AT]posteo.de
Top Related Projects
:cherry_blossom: A command-line fuzzy finder
A simple, fast and user-friendly alternative to 'find'
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
A code-searching tool similar to ack, but faster.
Fuzzy Finder in rust!
The next gen ls command
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot