| Crates.io | find-files |
| lib.rs | find-files |
| version | 0.1.8 |
| created_at | 2019-02-26 17:07:47.99668+00 |
| updated_at | 2019-09-06 13:24:58.175321+00 |
| description | Find Files (ff) utility recursively searches the files whose names match the specified RegExp pattern in the provided directory (defaults to the current directory if not provided). |
| homepage | |
| repository | https://github.com/vishaltelangre/ff |
| max_upload_size | |
| id | 117407 |
| size | 93,798 |
Find Files (ff) utility recursively searches the files whose names match the specified RegExp pattern in the provided directory (defaults to the current directory if not provided).
Dual-licensed under MIT or the UNLICENSE.

Download the latest precompiled executable ff binary for your platform from the releases page.
If you're a Rust programmer, download and install ff command using cargo install find-files. To update to a newer version, use the --force flag.
$ hyperfine \
--warmup 3 \
--export-markdown benchmark-results.md \
"find . -iregex '.*[0-9]\.jpg$'" \
"find . -iname '*[0-9].jpg'" \
"fd -HI '.*[0-9]\.jpg$'" \
"ff .*[0-9]\.jpg$"
Benchmark #1: find . -iregex '.*[0-9]\.jpg$'
Time (mean ± σ): 42.8 ms ± 5.5 ms [User: 11.7 ms, System: 30.1 ms]
Range (min … max): 31.2 ms … 56.9 ms 48 runs
Benchmark #2: find . -iname '*[0-9].jpg'
Time (mean ± σ): 60.8 ms ± 7.2 ms [User: 27.9 ms, System: 31.4 ms]
Range (min … max): 44.0 ms … 76.2 ms 37 runs
Benchmark #3: fd -HI '.*[0-9]\.jpg$'
Time (mean ± σ): 18.8 ms ± 5.3 ms [User: 14.9 ms, System: 19.9 ms]
Range (min … max): 11.2 ms … 41.6 ms 96 runs
Benchmark #4: ff .*[0-9]\.jpg$
Time (mean ± σ): 18.7 ms ± 4.6 ms [User: 15.7 ms, System: 22.5 ms]
Range (min … max): 11.7 ms … 30.4 ms 123 runs
Summary
'ff .*[0-9]\.jpg$' ran
1.00 ± 0.37 times faster than 'fd -HI '.*[0-9]\.jpg$''
2.29 ± 0.63 times faster than 'find . -iregex '.*[0-9]\.jpg$''
3.25 ± 0.88 times faster than 'find . -iname '*[0-9].jpg'
| Command | Mean [ms] | Min…Max [ms] |
|---|---|---|
find . -iregex '.*[0-9]\.jpg$' |
42.8 ± 5.5 | 31.2…56.9 |
find . -iname '*[0-9].jpg' |
60.8 ± 7.2 | 44.0…76.2 |
fd -HI '.*[0-9]\.jpg$' |
18.8 ± 5.3 | 11.2…41.6 |
ff .*[0-9]\.jpg$ |
18.7 ± 4.6 | 11.7…30.4 |
Table: benchmark-results.md
NOTE: Sometimes, fd is a bit faster than ff by approximately 1 ms to 2 ms.
USAGE:
ff [FLAGS] [OPTIONS] <PATTERN> [ROOT_PATH]
FLAGS:
-s, --case-sensitive Search case sensitively. By default, files are
searched case insensitively.
-D, --exclude-dir-paths Exclude paths from the search result which are
directories and not files.
-h, --help Prints help information
-G, --ignore-gitignore Ignore searching files and directories specified
in .gitignore. By default, the files and
directories specified in .gitignore are included
in the search results.
-H, --ignore-hidden Ignore searching hidden files and directories. By
default, hidden files and directories are
included in the search results.
-V, --version Prints version information
OPTIONS:
-x, --exclude <exclude> Exclude files and directories matching this
regular expression from the search results.
-L, --level <level> Recursively search only given level directories
deep. By default no depth restriction is imposed.
A value of 0 would always yield zero results. A
value of 1 searches for the direct children in
the given path.
-j, --threads <threads> The approximate number of threads to use. A value
of 0 (which is the default) results in thread
count set to available CPU cores.
ARGS:
<PATTERN> Find files whose name (path) matches this substring or
the regular expression.
<ROOT_PATH> Path to the directory to search files inside.[default:
`$PWD`]
There are a tons of possibilities to search files using ff.
Following examples demonstrate just a tip of an iceberg.
List paths of files recursively in the current working directory matching article string.
ff article
List files having .png, or .PNG extension.
ff png$
List files having strict .PNG extension.
ff -s PNG$
Search various image files.
ff "\.(png|jpg|jpeg|gif|svg)$"
List files whose path matches controllers string.
ff controllers
Search .js files in ./spec directory.
ff \.js ./spec
Search a file which is expected to be inside hidden .git directory whose name contains commit or something similar.
$ ff git.*commit
./.git/COMMIT_EDITMSG
# omitted other results
Do not show hidden files and directories in the search results.
ff something -H
Do not show those files and directories in the search results which are enlisted in .gitignore.
ff src/.*js$ -G
Without -G (--ignore-gitignore) flag in the above command, it also includes the results in the directories such as node_modules by default.
Do not show paths which are just directories and not actual files.
$ ff -D user
./app/models/user.rb
./app/models/user/address.rb
./specs/models/user_spec.rb
./specs/models/user/address_spec.rb
Without -D (--exclude-dir-paths) flag in the above command, it also includes the paths of the matching directories in the results as follows.
$ ff user
./app/models/user.rb
./app/models/user
./app/models/user/address.rb
./specs/models/user_spec.rb
./specs/models/user
./specs/models/user/address_spec.rb
Exclude (omit) files and directories which match the provided optional exclude RegExp pattern.
ff rb$ app/controllers -x /(audit|admin|sso|api)/
Above command will show paths of all files whose name ends with rb inside the relative app/controllers directory excluding the paths which match /(audit|admin|sso|api)/ pattern.
Limit searching beyond 3 levels deep in the given path.
ff -L 3 .js$