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
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
ptzz
9bd1d12c00
Add --no-ignore-vcs option
...
When passed, .gitignore files will not be respected.
2017-11-22 23:18:22 +01:00
Dock
c0bfc65d88
Handle terminal signals ( #128 )
...
fixes #87
2017-11-22 23:05:09 +01:00
sharkdp
bba5c4f607
Fix some clippy warnings
2017-10-26 21:13:56 +02:00
sharkdp
9d26b74c2a
Workaround for the unsafe
block.
...
See #147
2017-10-25 22:45:00 +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
J.W
e38b7d7bff
Fix --type: skip if file type is unknown
2017-10-25 18:29:40 +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
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
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
1bc58b2fbb
Group outputs from exec
2017-10-14 18:06:49 -04:00
Michael Aaron Murphy
718f723d31
Enable absolute paths w/ exec
2017-10-14 16:42:47 -04:00
Michael Aaron Murphy
884bd41cae
Apply cargo fmt
2017-10-14 14:04:04 -04:00
Michael Aaron Murphy
fb1cd3a322
Fix for older builds
...
Rust 1.19 will be a requirement, however.
2017-10-14 13:38:54 -04:00
Michael Aaron Murphy
4a5a5faf4d
Implement --exec feature
...
Closes #84
2017-10-14 12:24:17 -04:00
sharkdp
8fc3a83d92
Use absolute path to perform search, fixes #81
...
Previously, we were using the relative path to extract the search
string. For the current directory, the returned relative path was equal
to `""`. This is why the current directory did not show in the search
results (see #81 ).
This commit also changes the way that `--full-path` works, which was
previously working on relative paths. It seems more useful to search the
absolute path, though. Otherwise, search results could change just by
calling fd (with a given search path) from a different directory.
2017-10-13 18:16:26 +02:00
Antti Keränen
049b9ec06b
Format the source code using rustfmt
2017-10-12 19:33:14 +02:00
Garrett Squire
ccb899a511
break main into separate modules
2017-10-11 08:21:09 +02:00