Commit Graph

172 Commits

Author SHA1 Message Date
Thayne McCombs
115ae93df9 Refactor file types check to be on impl of FileTypes
Relates to #382
2021-08-10 20:30:23 +02:00
himself65
4e04d13215 Fix return out of match pattern 2021-08-09 13:36:09 +02:00
William Correia
f8ae334ca9
Add --no-ignore-parent flag
- Flag toggles parent checking in the `ignore` crate.  This should
  affect both git and non-git ignore files.
- Updated Changelog.
2021-08-08 17:38:24 -04:00
David Peter
a7a4499d1d Fix unneeded references 2021-07-27 09:05:23 +02:00
David Peter
2a2126c40a Fix clippy warnings 2021-07-27 09:05:23 +02:00
sharkdp
b2fa188029 Avoid panic when sending errors after receiver shutdown
fixes #678
2020-10-28 13:10:25 +01:00
Matthias Reitinger
ec4cc981fc
Add --prune flag
closes #535
2020-10-25 08:16:01 +01:00
Amrit Rathie
fd1ddc9d08 Change dependency dirs to dirs-next 2020-10-24 15:25:07 +02:00
sharkdp
3283a7b345 Fix warning 2020-05-19 14:01:00 +02:00
Bobbie Soedirgo
79d5a5bdc5 Add global fdignore support 2020-05-18 21:19:09 +02:00
Alexandru Macovei
d7cc34e36f [ownership] depend on users 0.10.0 on unix; parse user and group names 2020-05-18 21:11:33 +02:00
sharkdp
cb56add1d8 Add new --type socket and --type pipe filters
closes #511
2020-04-16 09:59:45 +02:00
sharkdp
d63c63be8c Add --min-depth and --exact-depth
Add new `--min-depth <depth>` and `--exact-depth <depth>` options in addition to the existing
option to limit the maximum depth.

closes #404
2020-04-15 17:02:41 +02:00
sharkdp
4815ee416e Remove process::exit instance 2020-04-03 22:36:32 +02:00
sharkdp
4590ae8535 Proper error handling within walk.rs 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
c79d1638f5 Move MAX_BUFFER_LENGTH 2020-04-03 22:36:32 +02:00
sharkdp
65096a653e Move FdOptions to Options 2020-04-03 22:36:32 +02:00
sharkdp
e42ddda5a6 Clean up exit code handling 2020-04-03 10:48:27 +02:00
sharkdp
4274075f6f Remove outdated license headers (not strictly required by Apache-2.0) 2020-04-03 10:19:13 +02:00
sharkdp
b9d0e72f70 Solve clippy issues 2020-04-03 10:08: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
sharkdp
d05e7171d4 Fix for older versions of Rust 2020-02-28 20:42:14 +01:00
sharkdp
81dee25438 Add additional check for symlink 2020-02-28 20:42:14 +01:00
sharkdp
bbf0f1cc1f New implementation of broken-symlink handling 2020-02-28 20:42:14 +01:00
sharkdp
bfc8c42444 Revert back to master state 2020-02-28 20:42:14 +01:00
sharkdp
d6034119ae Add comment for broken symlinks 2020-02-28 20:42:14 +01:00
sharkdp
82e6562cfc Further simplify the code 2020-02-28 20:42:14 +01:00
sharkdp
8cea65c1b8 Simplify match statement 2020-02-28 20:42:14 +01:00
Tom Milligan
9d73402ef2 walk: catch ignore NotFound error in the case of a broken symlink 2020-02-28 20:42:14 +01:00
fusillicode
0f2429cabc Add unit tests for merge_exitcodes 2020-02-22 12:32:35 +01:00
fusillicode
232e3937f2 Rename error_if_any_error to merge_exitcodes 2020-02-22 12:32:35 +01:00
fusillicode
e23398e6d0 Extract error_if_any_error as free function 2020-02-22 12:32:35 +01:00
fusillicode
7213f5a88e Add collection of job & thread exit codes + default to ExitCode::Error if any ExitCode::Error 2020-02-22 12:32:35 +01:00
sharkdp
f7d1938556 Formatting 2020-01-01 12:05:50 +01:00
Simon Engmann
dea1fbe722 Restrict --one-file-system to supported systems
Instead of having the option do nothing at runtime on unsupported
platforms, it is now only available on the systems that support it in
the first place.
2020-01-01 11:54:01 +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
sharkdp
0f27485faf Quit immediately if the channel::send call failed 2020-01-01 11:21:52 +01:00
sharkdp
d48aeda6b2 Apply clippy suggestions 2019-09-23 20:23:11 +02:00
sharkdp
08fcd7ce59 Make --changed-within/before work for directories
closes #470
2019-09-15 17:03:23 +02:00
sharkdp
641594c2c6 Use regex::bytes::* instead of regex::* 2019-09-15 16:47:38 +02:00
sharkdp
2545aaabd2 Exit immediately when Ctrl-C has been pressed twice 2019-09-15 13:06:03 +02:00
sharkdp
a0505bd4df Expose exit status from --exec-batch <cmd>
closes #333
2019-09-13 23:05:35 +02:00
Tavian Barnes
5cbd8405ec Check the pattern before anything else, since it doesn't require metadata
This should partially address #432 by decreasing the number of stat() calls:

    $ strace -c -f ./fd-before '\.h$' /usr -j1 -S +1k >/dev/null
    % time     seconds  usecs/call     calls    errors syscall
    ------ ----------- ----------- --------- --------- ----------------
     15.71    8.831948           7   1192279     46059 stat
    $ strace -c -f ./fd-after '\.h$' /usr -j1 -S +1k >/dev/null
    % time     seconds  usecs/call     calls    errors syscall
    ------ ----------- ----------- --------- --------- ----------------
      7.92    1.972474          10    183907     46046 stat

Though it's not as few as possible:

    $ strace -c -f find /usr -iname '*.h' -size +1k >/dev/null
    % time     seconds  usecs/call     calls    errors syscall
    ------ ----------- ----------- --------- --------- ----------------
     19.01    0.946500           5    161649           newfstatat
    $ strace -c -f bfs /usr -iname '*.h' -size +1k >/dev/null
    % time     seconds  usecs/call     calls    errors syscall
    ------ ----------- ----------- --------- --------- ----------------
     13.73    0.406565           5     69005           statx

Performance is much better when metadata is required:

    $ hyperfine ./fd-{before,after}" '\.h$' /usr -j1 -S +1k"
    Benchmark #1: ./fd-before '\.h$' /usr -j1 -S +1k
      Time (mean ± σ):      4.623 s ±  0.154 s    [User: 1.465 s, System: 3.354 s]
      Range (min … max):    4.327 s …  4.815 s    10 runs

    Benchmark #2: ./fd-after '\.h$' /usr -j1 -S +1k
      Time (mean ± σ):      2.650 s ±  0.058 s    [User: 1.258 s, System: 1.592 s]
      Range (min … max):    2.568 s …  2.723 s    10 runs

    Summary
      './fd-after '\.h$' /usr -j1 -S +1k' ran
        1.74 ± 0.07 times faster than './fd-before '\.h$' /usr -j1 -S +1k'

While remaining the same when it's not:

    $ hyperfine ./fd-{before,after}" '\.h$' /usr -j1"
    Benchmark #1: ./fd-before '\.h$' /usr -j1
      Time (mean ± σ):      2.382 s ±  0.038 s    [User: 1.221 s, System: 1.286 s]
      Range (min … max):    2.325 s …  2.433 s    10 runs

    Benchmark #2: ./fd-after '\.h$' /usr -j1
      Time (mean ± σ):      2.362 s ±  0.034 s    [User: 1.193 s, System: 1.294 s]
      Range (min … max):    2.307 s …  2.422 s    10 runs

    Summary
      './fd-after '\.h$' /usr -j1' ran
        1.01 ± 0.02 times faster than './fd-before '\.h$' /usr -j1'
2019-05-08 07:28:47 -05: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
6aa87f3423 save one indent level in error handling for add_ignore 2019-01-26 16:15:48 +01:00
Alexandru Macovei
74e593c43c inline value used only once 2019-01-26 16:15:48 +01:00
Alexandru Macovei
df4227c614 Uniform names for config and wants_to_quit. Pass Arc's by ref. 2019-01-26 16:15:48 +01:00
Alexandru Macovei
5ade72a5e1 split spawn_receiver(..) and spawn_senders(..) from scan(..).
This is just a split commit, refraining from renaming too much.

The drop(tx) call is no longer necessary, as the first sender
is dropped at the end of spawn_senders(..)
2019-01-26 16:15:48 +01:00
sharkdp
8cfdcf43f6 Lock stdout only once 2019-01-09 08:20:20 +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
kimsnj
6b40a075cd exec-batch: fix a panic with -X "echo {}" and pass stdio to child cmd 2018-11-12 21:11:40 +01:00
kimsnj
45d1b15cff Add support for batch execution of command 2018-11-12 21:11:40 +01:00
sharkdp
f064ee5509 Properly use .ignore files, see #156 2018-10-27 18:11:50 +02:00
sharkdp
81a27fa9bd Unify error messages, closes #342 2018-10-27 16:30:29 +02:00
sharkdp
6ff58abb6c Re-enable .ignore files, closes #156 2018-10-27 15:42:02 +02:00
Park Juhyung
095bad550f Print errors when --verbose is set 2018-10-23 21:50:25 +02:00
yobrave
e2bb932f87 Doc: add chinese readme link (#347) 2018-10-19 22:05:15 +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
cb1cfa108b ErrorCode enum variants to be more descriptive 2018-10-03 16:06:18 +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
psinghal20
f9c4e8d399 refactor: loosen strict handling of missing --ignore-file 2018-10-03 13:11:51 +02:00
sharkdp
046b0574dc Rename error => print_error_and_exit and introduce print_error 2018-10-01 22:00:23 +02:00
psinghal20
6407dc4eb4 chore: format code via rustfmt 2018-10-01 22:00:23 +02:00
psinghal20
2ebef2d46f feat: enable display of error messages 2018-10-01 22:00:23 +02:00
sharkdp
27caa33729 cargo fmt 2018-09-27 23:01:38 +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
50a2bab5cd Use short-circuiting for --type searches
Reverses the order of boolean checks for `--type` searches,
making them about 10% to 50% faster(!).
2018-08-19 16:27:23 +02:00
sharkdp
641976cf7a Remove duplicated lstat syscall
Removes a unnecessary `lstat` syscall by calling `.metadata()` only
once. This makes `--type executable` searches about 15% faster.
2018-08-19 16:23:06 +02:00
sharkdp
c1ef68662c Update for new rustfmt 2018-05-14 21:00:00 +02:00
sharkdp
4172ed03f0 Do not include non-files when using --size 2018-04-25 23:08:05 +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
sharkdp
f9a32583a5 Move is_executable to fshelper module 2018-03-25 19:48:09 +02:00
sharkdp
2cf8e7b8a5 Move is_executable to internal module 2018-03-25 18:37:50 +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
5397787824 Skip fifos, sockets, .. when using --type f/d/l 2018-03-15 21:38:52 +01:00
sharkdp
47d95284aa Skip invalid utf8 filenames, closes #250 2018-02-26 08:20:31 +01:00
sharkdp
631931b431 Only construct entry_path if needed 2018-02-25 18:17:11 +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
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
Dock O'Neal
bc2b7a33ae Fixing exec hang by disabling ctrl-c handling for exec 2018-01-25 07:47:04 +01:00
David Peter
32a34cf8c9
Introduce maximum output buffer size (#212)
Closes #191
2018-01-03 10:40:08 +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