Commit Graph

273 Commits

Author SHA1 Message Date
sharkdp af9d8082a1 Better error message 2020-04-03 22:36:32 +02:00
sharkdp 094516aec3 Refactor directory handling 2020-04-03 22:36:32 +02:00
sharkdp b415d7234b Rename fshelper to filesystem 2020-04-03 22:36:32 +02:00
sharkdp e0cba4b700 Remove 'internal' module 2020-04-03 22:36:32 +02:00
sharkdp 342d12db3f Remove possibility to use '--exec <cmd>' with a single dash 2020-04-03 22:36:32 +02:00
sharkdp 809fd8fb78 Move regex helpers to new module 2020-04-03 22:36:32 +02:00
sharkdp a3060f952e Move error macros to error.rs 2020-04-03 22:36:32 +02:00
sharkdp 65096a653e Move FdOptions to Options 2020-04-03 22:36:32 +02:00
sharkdp 9f738ad995 Move filter up from internal 2020-04-03 22:36:32 +02:00
sharkdp 5c27ab1a06 Move filetypes up from 'internal' 2020-04-03 22:36:32 +02:00
sharkdp 4274075f6f Remove outdated license headers (not strictly required by Apache-2.0) 2020-04-03 10:19:13 +02:00
sharkdp c9dc617711 Rename --list to --list-details 2020-04-03 09:58:47 +02:00
sharkdp da5cd12b24 Add `-l`/`--list` option
Add a new `-l`/`--list` option to show more details about the search results. This is basically
an alias for `--exec-batch ls -l` with some additional `ls` options.
This can be used in order to:
    * see metadata like permissions, owner, file size, modification times (#491)
    * see symlink targets (#482)
    * achieve a deterministic output order (#324, #196, #159)
    * avoid duplicate search results when multiple search paths are given (#405)
2020-04-03 09:58:47 +02:00
sharkdp d43827fe57 Add --max-results=<count> option
This new option can be used instead of piping to `head -n <count>` for
improved performance:

| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `fd --max-buffer-time=0 flow.yaml` | 153.9 ± 2.5 | 151.3 | 170.3 | 4.21 ± 5.86 |
| `fd --max-buffer-time=0 flow.yaml \| head -n 1` | 145.3 ± 17.4 | 111.0 | 180.2 | 3.98 ± 5.55 |
| `fd --max-results=1 flow.yaml` | 36.5 ± 50.8 | 7.2 | 145.7 | 1.00 |

Note: there is a large standard deviation on the last result due to the
non-deterministic file system traversal. With `--max-results`, we don't
have to traverse the whole filesystem tree, so it's all about luck.

closes #472
closes #476
2020-04-02 20:27:41 +02:00
sharkdp 44605d55dd Use .to_string() instead of .description() 2020-03-22 15:54:43 +01:00
Dave Parfitt 70448b0006 honor the NO_COLOR env var 2020-03-19 22:56:28 +01:00
sharkdp 328c6640be Formatting 2020-01-01 12:05:33 +01:00
Simon Engmann 94993ca6c2 Rename `--same-file-system` to `--one-file-system` 2020-01-01 11:54:01 +01:00
Simon Engmann 8796de57b5 Add same file system functionality
This adds a `--same-file-system` CLI option that instructs the walker to
not cross file system boundaries.
Due to the fact that the corresponding option of the `ignore` crate's
`WalkBuilder` does not support platforms other than Unix and Windows,
the option does nothing on platforms other than those.
Resolves #507
2020-01-01 11:54:01 +01:00
Rafał Hajdacki fb205f5057 Allow changing current working directory of fd 2019-12-23 15:42:33 +01:00
sharkdp 9350c8544d Clean up cfg line 2019-09-15 18:58:05 +02:00
sharkdp 1ab4e87dda Disable jemalloc for musl builds 2019-09-15 18:58:05 +02:00
sharkdp 4e20803e7d Disable jemallocator on Windows 2019-09-15 18:58:05 +02:00
sharkdp 5a154866e3 Use jemalloc
Benchmark #1: ./fd-sys-alloc '[0-9]\.jpg$' /home/shark
  Time (mean ± σ):     246.8 ms ±   3.4 ms    [User: 960.1 ms, System: 810.0 ms]
  Range (min … max):   244.1 ms … 257.1 ms    12 runs

Benchmark #2: ./fd-jemalloc '[0-9]\.jpg$' /home/shark
  Time (mean ± σ):     201.0 ms ±   3.0 ms    [User: 833.9 ms, System: 666.9 ms]
  Range (min … max):   196.1 ms … 206.9 ms    14 runs

Summary
  './fd-jemalloc '[0-9]\.jpg$' /home/shark' ran
    1.23 ± 0.03 times faster than './fd-sys-alloc '[0-9]\.jpg$' /home/shark'
2019-09-15 18:58:05 +02:00
sharkdp d5da615c17 Implement glob-based searches
closes #284
2019-09-15 16:47:38 +02:00
sharkdp 641594c2c6 Use regex::bytes::* instead of regex::* 2019-09-15 16:47:38 +02:00
Nathan Moreau 588e344d5b Remove type annotation. 2019-09-15 10:57:27 +02:00
Nathan Moreau 29bf9d731d Handle any string replacement. 2019-09-15 10:57:27 +02:00
Nathan Moreau 24e108e1ad Add path-separator option.
Example usage: `fd.exe --path-separator /` on windows.
2019-09-15 10:57:27 +02:00
sharkdp a0505bd4df Expose exit status from `--exec-batch <cmd>`
closes #333
2019-09-13 23:05:35 +02:00
Tim Holland 074cfad3d4 Remove deprecated trim_left(_matches)?
warning: use of deprecated item 'core::str::<impl str>::trim_left_matches': superseded by `trim_start_matches`
   --> src/main.rs:222:28
    |
222 |                 .map(|e| e.trim_left_matches('.'))
    |                            ^^^^^^^^^^^^^^^^^
    |
    = note: #[warn(deprecated)] on by default
2019-03-02 08:15:12 +01:00
Alexandru Macovei c2b46f247f avoid cloning command, in the wake of 9d26b74 2019-01-30 20:42:43 +01:00
Alexandru Macovei fe53af064b fix most clippy lints 2019-01-26 16:15:48 +01:00
Alexandru Macovei 051ff5987a [2018 edition] remove all extern crate lines from sources 2019-01-07 12:52:30 +01:00
Alexandru Macovei 64e6ea9fe9 [2018 edition] run cargo fix edition and edition-idioms 2019-01-07 12:52:30 +01:00
sharkdp 4b5efa3438 Use lscolors crate
Use my new [lscolors](https://github.com/sharkdp/lscolors) crate instead
of the internal `lscolors` module

- Speeds up `LS_COLORS` querying, leading to a nice 25% performance
  improvement when
- Adds support for 24-bit colors and background colors

closes #368
closes #363
2018-12-14 23:20:18 +01:00
kimsnj 45d1b15cff Add support for batch execution of command 2018-11-12 21:11:40 +01:00
sharkdp 81a27fa9bd Unify error messages, closes #342 2018-10-27 16:30:29 +02:00
Park Juhyung 095bad550f Print errors when --verbose is set 2018-10-23 21:50:25 +02:00
Casey Primozic cdf737bf5c Add `search-path` option
* Multiple `--search-path` arguments can be supplied which replace the positional `path` argument for providing directories which will be searched.
 * When a `--search-path` argument is provided, positional `path` arguments will not be allowed
2018-10-22 19:26:36 +02:00
Josh Leeb-du Toit 8543ca645d Split internals.rs into module and multiple files
This PR splits `internals.rs` into the `internal` module with multiple
files, and moves `FdOptions` into `opts.rs`.

The main motivation behind this is to move logic for constructing
`FdOptions` out of the main function and more readable and easier to
understand in the `opts` module. The goal will eventually to be able
to write `FdOptions::from(matches)` and have the options constructed.
2018-10-12 19:14:19 +02:00
Josh Leeb-du Toit 984f04f142 Add print_error macros to replace functions
This patch replaces the `print_error` and `print_error_and_exit`
functions with equivalent macros.
2018-10-12 07:31:21 +02:00
Karim SENHAJI abe8aa55c0 clean-up first implementation of modification date filter 2018-10-10 19:52:37 +02:00
Karim SENHAJI 54c117d72f Add support for --changed-before and --changed-with for modification time based search 2018-10-10 19:52:37 +02:00
Josh Leeb-du Toit 8bdd8f8e8f Move exit code consts into enum
Previously, the constants defined in `src/exit_codes` weren't being
used, and the constants for exit codes were being redefined in the
`internals` module.

This PR removes the exit code consts and instead uses an enum defined in
`src/exit_codes`. This centralizes the definitions of exit codes making
them easier to modify and keep track of.
2018-10-03 16:06:18 +02:00
sharkdp 046b0574dc Rename error => print_error_and_exit and introduce print_error 2018-10-01 22:00:23 +02:00
sharkdp 27caa33729 cargo fmt 2018-09-27 23:01:38 +02:00
Mahmoud Al-Qudsi d375b5e1f5 Add `--maxdepth` as hidden alias for `--max-depth`
For muscle memory compatibility with `rg`. This variant will not show in
the help or in the program options, and is only checked if `--maxdepth`
is not specified.
2018-09-13 22:33:18 +02:00
sharkdp aa70c5a446 Add `--type empty`
Add a new `empty`/`e` type to search for empty files and/or directories.

To search for both empty files and directories, use one of the
following:

    fd --type empty
    fd -te

    fd --type empty --type file --type directory

To search for empty files, use

    fd --type empty --type file
    fd -te -tf

To search for empty directories, use

    fd --type empty --type directory
    fd -te -td

closes #273
2018-08-19 17:05:04 +02:00
sharkdp c428f52209 Run cargo fmt 2018-08-03 21:20:48 +02:00
sharkdp c1ef68662c Update for new rustfmt 2018-05-14 21:00:00 +02:00
Steve Pentland 2f3b472dfd Changes from review 2018-04-25 08:14:12 +02:00
Steve Pentland 0207c1371e Initial impl of size constraints.
This adds find-style size constraints with + or - indicating greater
or less than, a numerical size, and a unit
2018-04-25 08:14:12 +02:00
sharkdp 6a9f16e159 Run latest version of rustfmt 2018-04-13 23:13:22 +02:00
sharkdp 37483036e0 Implement --ignore-file 2018-03-26 08:28:22 +02:00
David Peter 8c1b037279
Normalize absolute paths, fixes #268 (#270)
* Normalize absolute paths, fixes #268
* Split unit tests into several tests
2018-03-25 23:47:58 +02:00
Pramod Bisht 67f6fdf6a7 Code formating 2018-03-25 16:53:12 +02:00
Pramod Bisht 8ce127e443 changed executable=> executable_only 2018-03-25 16:53:12 +02:00
Pramod Bisht b1e48efc4a Addresses #246
Some implementation to search by filetype `executables`
2018-03-25 16:53:12 +02:00
sharkdp ffd49c60bd Error if user supplied path instead of pattern 2018-03-15 07:53:00 +01:00
sharkdp 89a8f5573d Formatting change 2018-03-15 07:53:00 +01:00
sharkdp c654159bf2 Update to ansi_term 0.11 2018-03-12 23:19:20 +01:00
sharkdp 40d811c7be Rewrite of file-type filtering leading to 5% speed-up 2018-02-25 18:17:11 +01:00
sharkdp b4be1f161c Add support for .fdignore files 2018-02-21 22:55:26 +01:00
Pramod Bisht 7a3994decb Changes as per the instruction of `cargo fmt -- --write-mode=diff` 2018-02-19 21:17:11 +01:00
Pramod Bisht 7e8c2248d0 Fixes: #234
Giving suggestion to use `--fixed-strings` in case user passes invalid metacharacters as a regex.
2018-02-19 21:17:11 +01:00
sharkdp 814d37030e Implement -F/--fixed-strings/--literal 2018-02-10 15:55:06 +01:00
Martin Larralde 370d9f081f Use RegexSet instead of hand-written parser 2018-02-10 14:18:37 +01:00
Martin Larralde 86fe9977e8 Implement multiple suffixes extension support with tests (#214) 2018-02-10 14:18:37 +01:00
Steve Pentland b4d39270d6 Allow -exec to work as --exec (#226)
* Replace usage of `-exec` by `--exec`, except when it is used as a value that is given to `--exec/-exec/-x`.
* Limit usage of --exec option to single instance.
2018-01-29 20:32:46 +01:00
sharkdp 39fb41f05a Move exit codes to 'internal' module 2018-01-03 10:00:22 +01:00
Dock 26ad7da347 Using wants_to_quit to exit the sender as well as the reciever (#211)
Closes #210
2018-01-03 09:26:11 +01:00
sharkdp a5f5ad6254 Re-enable code style check 2018-01-01 16:00:32 +01:00
Thejaswi Kadur faf934da4b Added support for filtering by multiple filetypes and extensions (#205)
Closes #177 
Closes #199
2018-01-01 12:09:33 +01:00
sharkdp aaf9e024d5 Updates for 6.1.0 2017-12-09 21:40:13 -08:00
Dock 51aea57a6a Add multiple path support (#182)
* Adding support for multiple paths. (panic)

- Started adding multiple file support
- fd panics with multiple files right now

* Moved the ctrlc handler to main.

- Moved the ctrlc handler to main so we can search multiple files

* Tests now allow custom directory setup

- TestEnv::new() now takes two arguments, the directories to create and
the files to create inside those directories.

* rust-fmt changes

* rust-fmt changes

* Moving code around, no need to do everything in one big loop

- PathDisplay was never actually used for anything, removed it during refactor of main
- Removed redundant logic for absolute paths
- Moved code placed needlessly inside a loop in the last commit outside of that loop.

* Moving code around, no need to do everything in one big loop

- PathDisplay was never actually used for anything, removed it during refactor of main
- Removed redundant logic for absolute paths
- Moved code placed needlessly inside a loop in the last commit outside of that loop.

* Removed commented code in testenv

* Refactored walk::scan to accept the path buffer vector. Using the ParallelWalker allows for multithreaded searching of multiple directories

* Moved ctrlc handler back into walker, it is only called once from main now.

* Moved the colored output check back to it's original place

* Removing shell-escape, not sure how it got added...

* Added test for `fd 'a.foo' test1` to show that a.foo is only found in the test1 and not the test2 direcotry

* Removing side effect from walk::scan, `dir_vec` is no longer a mutable reference and an iterator is being used instead.

* Running rustfmt to format code correctly
2017-12-06 14:52:23 -08:00
Ubuntu c165ff0546 Refactorying main.rs : remove unused variable (empty_pattern) 2017-12-03 12:21:09 +01:00
ptzz 9bd1d12c00 Add --no-ignore-vcs option
When passed, .gitignore files will not be respected.
2017-11-22 23:18:22 +01:00
Matthias Reitinger 0f82fe7ec0 Rename TokenizedCommand to CommandTemplate 2017-11-15 23:18:36 +01:00
Matthias Reitinger 18709b1ede Remove shell with --exec 2017-11-15 23:18:36 +01:00
sharkdp 26f71dd21a Remove superfluous path.replace
See #153
2017-11-11 08:58:55 +01:00
sharkdp b3f1e1844d Move 'win' crate back into local module
This is necessary to publish on crates.io
2017-10-26 21:59:12 +02:00
sharkdp bba5c4f607 Fix some clippy warnings 2017-10-26 21:13:56 +02:00
J.W 6b232a82ee Fix --exec 2017-10-26 20:56:32 +02:00
J.W 87ba4e3bb0 Fix root directory for Windows 2017-10-26 20:56:32 +02:00
sharkdp 5ad69fb2fb Add support for exclude-patterns
* Add `--exclude`/`-E` option.
* Support for multiple exclude patterns

Example:
``` bash
> fd --exclude 'tests/**/*.rs' mod
src/exec/mod.rs
src/fshelper/mod.rs
src/lscolors/mod.rs
```

Closes #89
2017-10-25 22:22:12 +02:00
sharkdp e9cf8af911 Updates and preparations for v5.0 2017-10-22 12:10:51 +02:00
Antti Keränen 701b8f209b Relicense under MIT/Apache-2.0 2017-10-22 10:36:42 +02:00
J.W 570ea78d24 jakwings/fd@a44e677 -> subdirectory "win" 2017-10-21 00:33:49 +02:00
J.W ce73c086b6 Auto disable colored output for unsupported Windows shells 2017-10-21 00:33:49 +02:00
J.W 8d85debc12 Refactor path handling (fixes #113)
* Fix path check
* Fix full path matching
* Allow more simple driver names in Windows tests
* Factor out special is_dir() check for "." and ".."
2017-10-18 20:04:34 +02:00
Michael Aaron Murphy 2a23905af5 Fix merge conflicts 2017-10-15 09:37:48 -04:00
J.W 54d9dde0d4 Use .canonicalize() to check paths & Reword comments 2017-10-15 15:01:24 +02:00
J.W e649c8fa79 Use a uniform output format for searching ../
closes #107, fixes #82 by the way
2017-10-15 15:01:24 +02:00
Michael Aaron Murphy ad1b4f3b2b Optimize grouping for *nix archs 2017-10-14 21:45:31 -04:00
Michael Aaron Murphy 884bd41cae Apply cargo fmt 2017-10-14 14:04:04 -04:00
Michael Aaron Murphy 137fe2e697 Merge Conflicts 2017-10-14 12:35:16 -04:00
Michael Aaron Murphy 4a5a5faf4d Implement --exec feature
Closes #84
2017-10-14 12:24:17 -04:00
J.W f2632d5fce Dot "." also matches newline by default (closes #111) 2017-10-14 16:12:11 +02:00
Matthias Reitinger b441528067 Improve smart case to only consider literal uppercase chars (#103) 2017-10-14 11:03:21 +02:00
Antti Keränen 049b9ec06b Format the source code using `rustfmt` 2017-10-12 19:33:14 +02:00
J.W e075e1cf7c Add -i, --ignore-case 2017-10-12 07:28:05 +02:00
Rav Chandra 35e5ecd492 liberally accept >2 -u options as per ripgrep 2017-10-11 23:15:21 +02:00
Rav Chandra 4f2d9e77b3 Add ripgrep aliases for no-ignore and hidden 2017-10-11 23:15:21 +02:00
Garrett Squire ccb899a511 break main into separate modules 2017-10-11 08:21:09 +02:00
Jean-Christophe Petkovich affe41949d Switch symlink arg from 's' to 'l' (#83)
closes #80
2017-10-09 21:25:30 +02:00
David Peter 4731dc670c Enhanced Windows support, see #70
* Use easier way to convert path components
* Fix failing tests on Windows
2017-10-07 09:40:44 +02:00
sharkdp 34e4620e26 Code style udpates 2017-10-05 21:31:44 +02:00
Florian Hofmair 396b9baaa5 Use clap to generate shell completions 2017-10-04 18:00:25 +02:00
Antti Keränen 4ec33d064c Add a comment about the default value of --threads 2017-10-03 20:21:49 +02:00
sharkdp 7399558a06 Re-structure '--help' text 2017-10-03 19:30:39 +02:00
Antti Keränen 4b61beaa75 Add flag to force color
Color can now be forced on even when piping the output. Changed the
--no-color flag to --color which uses the same options that ripgrep
uses for --color (excluding ansi).

Closes #49.
2017-10-03 18:32:24 +02:00
Matthias Reitinger 2256affd8f Fix extension comparison logic 2017-10-03 18:28:54 +02:00
Matthias Reitinger 32a321aafd Extract entry extension only when there is an extension filter 2017-10-03 18:28:54 +02:00
Matthias Reitinger 83db8673cf Add extension filtering 2017-10-03 18:28:54 +02:00
sharkdp 60df14f0a3 Fix build on Windows 2017-09-27 21:25:50 +02:00
sharkdp adaf4f6d73 Reduce number of 'stat' syscalls from 3 to 1, see #36 2017-09-18 19:27:26 +02:00
sharkdp c1b8d1eae1 Minor style changes 2017-09-17 09:37:39 +02:00
exitium 2a3dd5b631 Add file type filtering 2017-09-17 09:25:01 +02:00
sharkdp fbce0d4f39 Fix clippy warnings 2017-09-15 21:03:47 +02:00
sharkdp 1397dbcc6f Fix warning 2017-09-15 20:56:07 +02:00
sharkdp b4c8a8ba56 Use N-1 search threads, where N = # cores 2017-09-09 16:13:27 +02:00
sharkdp 1268e982f6 Add --dereference as an alias for --follow 2017-09-09 15:40:32 +02:00
sharkdp 31c76989ad Change short flag for --follow to -L, see #33 2017-09-09 15:34:25 +02:00
sharkdp f92dfb86bb Update help text 2017-09-09 15:25:48 +02:00
sharkdp 977e0ac694 Spawn a separate thread for the receiver 2017-09-09 15:25:48 +02:00
sharkdp 550e3b3572 Implement short-time buffering for sorted output 2017-09-09 15:25:48 +02:00
sharkdp e06189e654 Initial version of parallel directory traversal
see #32
2017-09-09 15:25:48 +02:00
sharkdp 2d1d24c38c Rename config parameter for print0 and fix sorting in tests 2017-08-01 22:36:38 +02:00
Michael Mior 1b0c8f349a Add --print0 option 2017-07-19 17:10:06 -04:00
sharkdp 54f33e5227 Use absolute paths if root dir is an absolute path, fixes #40 2017-06-11 20:55:01 +02:00
sharkdp 1b1f644398 Throw an error if root directory is non-existent, fixes #39 2017-06-11 20:41:32 +02:00
sharkdp 24070b0be0 Handle invalid UTF-8, fixes #34 2017-06-11 15:38:56 +02:00
sharkdp 087e709acd Use clap, change --sensitive to --case-sensitive
see #33
2017-06-11 14:25:58 +02:00
sharkdp 1adcf76f1b Use atty instead of isatty 2017-06-10 17:30:48 +02:00
sharkdp c8d4ec89a3 Use references instead of values 2017-06-09 14:39:57 +02:00
Sebastiaan Vermeulen f7910c125d windows compatibility (#35)
windows compatibility
2017-06-09 12:18:12 +02:00
sharkdp 2ea23c0000 Exit gracefully on broken pipe, fixes #24 2017-06-07 23:58:08 +02:00
sharkdp 8c6a9c8e32 Set static lifetime, fixes #23 2017-06-06 20:36:17 +02:00
sharkdp 4d950ae97c Highlight executable files 2017-06-05 21:51:10 +02:00
sharkdp 8adb5b9f84 Add option to print absolute paths, closes #10 2017-06-05 21:18:27 +02:00
sharkdp db8d0cc342 Fix clippy warning 2017-06-05 18:12:35 +02:00
sharkdp 634016b9a0 Add optional second argument, closes #5 2017-06-05 16:25:13 +02:00
sharkdp bf013da8ff Code clean-ups, documentation 2017-06-05 14:14:04 +02:00
sharkdp 0f5ede48d5 Restructure according to Cargo doc 2017-06-05 11:56:39 +02:00
sharkdp c6209471a2 Re-structure code, add unit tests, use LS_COLORS 2017-06-01 22:46:15 +02:00
sharkdp 0757a50c31 Add more unit tests, search directories and symlinks too 2017-05-24 22:16:55 +02:00
sharkdp ae12e00533 Switch to 'ignore', closes #4 2017-05-15 22:38:34 +02:00
sharkdp b18eded6aa Use -f instead of -F 2017-05-15 21:48:14 +02:00
sharkdp c45cf26577 Search only filename by default, closes #22 2017-05-15 21:44:47 +02:00