A simple, fast and user-friendly alternative to 'find'
Find a file
2017-09-09 16:42:10 +02:00
src Use N-1 search threads, where N = # cores 2017-09-09 16:13:27 +02:00
tests Try to fix test on macOS 2017-09-09 16:42:10 +02:00
.gitignore Re-write in rust 2017-05-12 11:50:54 +02:00
.travis.yml Update .travis.yml, see #43 2017-06-12 22:12:10 +02:00
Cargo.lock Use N-1 search threads, where N = # cores 2017-09-09 16:13:27 +02:00
Cargo.toml Use N-1 search threads, where N = # cores 2017-09-09 16:13:27 +02:00
LICENSE Initial commit 2017-05-09 23:27:10 +02:00
README.md Add link to AUR package 2017-08-01 18:43:45 +02:00

fd

Build Status

fd is a simple, fast and user-friendly alternative to find.

While it does not seek to mirror all of find's powerful functionality, it provides sensible (opinionated) defaults for 80% of the use cases.

Features

  • Convenient syntax: fd PATTERN instead of find -iname '*PATTERN*'.
  • Smart case: the search is case-insensitive by default. It switches to case-sensitive if the pattern contains an uppercase character*.
  • Colorized terminal output (similar to ls).
  • Ignores hidden directories and files, by default.
  • Ignores patterns from your .gitignore, by default.
  • Regular expressions.
  • Unicode-awareness.
  • The command name is 50% shorter* than find :-).

Demo

Demo

Colorized output

fd can colorize files by extension, just like ls. In order for this to work, the environment variable LS_COLORS has to be set. Typically, the value of this variable is set by the dircolors command which provides a convenient configuration format to define colors for different file formats. On most distributions, LS_COLORS should be set already. If you are looking for alternative, more complete (and more colorful) variants, see here or here.

Benchmark

A search in my home folder with ~150.000 subdirectories and ~1M files. The given options for fd are needed for a fair comparison (otherwise fd is even faster by a factor of 5 because it does not have to search hidden and ignored paths):

benchmarking bench/fd --hidden --no-ignore --full-path '.*[0-9]\.jpg$' ~
time                 2.800 s    (2.722 s .. 2.895 s)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 2.821 s    (2.810 s .. 2.831 s)
std dev              16.52 ms   (0.0 s .. 17.02 ms)
variance introduced by outliers: 19% (moderately inflated)

benchmarking bench/find ~ -iregex '.*[0-9]\.jpg$'
time                 5.593 s    (5.412 s .. 5.798 s)
                     1.000 R²   (0.999 R² .. 1.000 R²)
mean                 5.542 s    (5.502 s .. 5.567 s)
std dev              37.32 ms   (0.0 s .. 42.77 ms)
variance introduced by outliers: 19% (moderately inflated)

(benchmarking tool: bench)

Both tools found the exact same 14030 files. Note that we have used the -iregex option for find in order for both tools to perform a regular expression search. Both tools are comparably fast if -iname '*[0-9].jpg' is used for find.

Install

With Rust's package manager cargo, you can clone, build and install fd with a single command:

cargo install --git https://github.com/sharkdp/fd

Note that rust version 1.16.0 or later is required. The release page of this repository also includes precompiled binaries for Linux.

On OS X, you can use homebrew:

brew install fd

On Arch Linux, you can install the AUR package fd-rs-git via yaourt, or manually:

git clone https://aur.archlinux.org/fd-rs-git.git
cd fd-rs-git
makepkg -si

Development

cargo build --release