Convert Figma logo to code with AI

cboxdoerfer logofsearch

A fast file search utility for Unix-like systems based on GTK3

3,260
208
3,260
146

Top Related Projects

63,665

:cherry_blossom: A command-line fuzzy finder

33,285

A simple, fast and user-friendly alternative to 'find'

47,483

ripgrep recursively searches directories for a regex pattern while respecting your gitignore

A code-searching tool similar to ack, but faster.

5,065

Fuzzy Finder in rust!

13,142

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:

  1. Install dependencies:

    sudo apt-get install git build-essential cmake libgtk-3-dev libglib2.0-dev libpcre3-dev
    
  2. Clone the repository:

    git clone https://github.com/cboxdoerfer/fsearch.git
    
  3. Build and install:

    cd fsearch
    mkdir build && cd build
    cmake ..
    make
    sudo make install
    
  4. 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

63,665

: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
33,285

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
47,483

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.

5,065

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.

13,142

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Build Status Translation status

FSearch is a fast file search utility, inspired by Everything Search Engine. It's written in C and based on GTK3.

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.

DistributionStableDevelopment
UbuntuPPA StablePPA Daily
Arch LinuxAURAUR (git)
Fedora/RHEL/CentOSCOPR StableCOPR Nightly
DebianOpenBuildService
openSUSEOpenBuildService
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