Commit Graph

273 Commits

Author SHA1 Message Date
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 aeff525c30 Attempt to fix #365 2021-08-08 15:02:01 +02:00
David Peter 2d398dc4a7 Fix directory-existence check on Windows
This fixes a bug on Windows where `fd` could not be used on ram disks
and encrypted folders.

closes #752
2021-08-08 15:02:01 +02:00
David Peter d9697d1486 Make the path-separator check Windows-only 2021-08-08 13:03:31 +02:00
David Peter 515e0ee469 Do not use .clone() 2021-08-08 13:03:31 +02:00
David Peter a0ca460901 Adjust error message 2021-08-08 13:03:31 +02:00
Kaleb Olson 693325bcf2 Adds path separator checking and hint for automatic `/` expansion for some windows shells, eg., msys 2021-08-08 13:03:31 +02:00
David Peter 2a2126c40a Fix clippy warnings 2021-07-27 09:05:23 +02:00
Allen Wild 1a3615df9c set default path separator to '/' in MSYS
MSYS and MSYS2 environments (such as Git Bash) have a UNIX like
filesystem which uses '/' as the path separator rather than '\', but
Rust doesn't know about this by default.

On Windows, check the MSYSTEM environment variable and set the default
value of the --path-separator option to '/' for convenience.

There is no similar detection of Cygwin because there seems to be no way
for Rust (and any native Win32) programs to detect that they're being
called from a Cygwin environment. Cygwin users can use a shell
alias/function/script to wrap fd.

Fixes: https://github.com/sharkdp/fd/issues/537
2021-02-15 20:08:59 +01:00
Allen Wild 8a532e5196 use custom --path-separator in arguments to --exec
When --path-separator is used, pass it on to commands run with
--exec(-batch) and --list-details.

On Windows, paths with drive letters (C:\foo) and UNC paths
(\\server\share\path) are handled as expected, though they're unlikely
to be found in normal usage of fd.

Fixes: https://github.com/sharkdp/fd/issues/697
2021-02-14 10:24:41 +01:00
sharkdp cadaef3f07 Show error if pattern matches leading dot but --hidden is not given, closes #615 2020-12-06 15:57:33 +01:00
sharkdp 296300ce46 Fix clippy suggestions 2020-12-06 12:04:47 +01:00
xanonid 441a235a0f Simplify code a bit (suggestions by clippy) 2020-12-06 11:52:10 +01:00
Marco Sirabella 6830b3dee9 Better defaults for LsColors 2020-12-06 11:48:19 +01:00
David Peter e0adb45d08
Fail with error message if numeric arguments can not be parsed
closes #675
2020-10-25 21:18:53 +01:00
Matthias Reitinger ec4cc981fc
Add --prune flag
closes #535
2020-10-25 08:16:01 +01:00
Fredrik Fornwall a851570b15 Disable jemalloc on Android (fixes #636 and #642)
Disabling jemalloc for Android fixes a build failure since jemalloc does
not build out of the box for that platform on older API versions.

Android started using jemalloc as the system allocator around 2014 for
most devices. In the latest Android version (11) the system allocator
has been switched to Scudo, which while not being jemalloc is modern and
actively maintained and should be used for most software on Android.

See:
- https://android-developers.googleblog.com/2020/06/system-hardening-in-android-11.html
- https://blog.nsogroup.com/a-tale-of-two-mallocs-on-android-libc-allocators-part-2-jemalloc/
- https://stackoverflow.com/questions/2266762/android-libc-version-and-malloc-implementation
2020-10-08 12:45:48 +02:00
sharkdp a81fef9992 Windows: Check for xterm-256color environment variable as a proxy for color support 2020-05-25 12:17:32 +02:00
sharkdp 53c338d71f Windows: Always enable colors if --color=always is set 2020-05-25 12:17:32 +02:00
sharkdp 1d1eefdb7b Disable jemalloc on macOS
This is a workaround for #498. See issue for details.

closes #498
2020-05-19 17:55:21 +02:00
sharkdp ddee6aa8f3 Revert "Always enable colors on Windows, closes #469"
This reverts commit a4e78519c4.
2020-05-19 17:09:27 +02:00
sharkdp 9d3cb69935 Minor refactoring 2020-05-19 15:57:47 +02:00
DJRHails da9af8c1eb Improve consistency of linting 2020-05-19 15:57:47 +02:00
DJRHails 4f4591bfdc Correct Err return to prevent panic 2020-05-19 15:57:47 +02:00
DJRHails 28d6a4f518 Check for no valid search paths to prevent panic 2020-05-19 15:57:47 +02:00
DJRHails 42719624a8 Refactor to for-loop 2020-05-19 15:57:47 +02:00
DJRHails c5a311d3cc Allow for missing directories 2020-05-19 15:57:47 +02:00
Bobbie Soedirgo 79d5a5bdc5 Add global fdignore support 2020-05-18 21:19:09 +02:00
Alexandru Macovei 1a16003cca [ownership][errs] ':' and '' args to --owner result in noop; reject strings with more than one ':' 2020-05-18 21:11:33 +02:00
Alexandru Macovei 4f9a02400a [ownership] add --owner arg parsing and storage 2020-05-18 21:11:33 +02:00
Alexandru Macovei 4f4330167a Fix some clippy lints, and format 2020-05-01 14:08:53 +02:00
Seamus Connor b22285ffe4 Fix --glob behavior with empty pattern
With an empty pattern, --glob results in no matches. This does not
align with the behavior of --fixed-strings or --regex. Update the
initialization code to handle globs with empty patterns.
2020-04-26 22:01:29 +02:00
Tobias Kortkamp 04bcd546b2 Also add NetBSD and OpenBSD 2020-04-16 20:33:32 +02:00
Tobias Kortkamp 4b5e8941a7 Fix --list-details on FreeBSD 2020-04-16 20:33:32 +02:00
sharkdp cb56add1d8 Add new `--type socket` and `--type pipe` filters
closes #511
2020-04-16 09:59:45 +02:00
sharkdp 4287cddc00 Add test 2020-04-15 23:32:28 +02:00
sharkdp 0b7febc3b6 Windows support (if GNU ls is installed) 2020-04-15 23:32:28 +02:00
sharkdp d91100e354 Add comment why we prefer gls 2020-04-15 23:32:28 +02:00
sharkdp 0f5500adfc Do not show output of 'gls --version' 2020-04-15 23:32:28 +02:00
sharkdp 2685728695 Add MacOS support for -l/--list-details 2020-04-15 23:32:28 +02:00
sharkdp 3b42898a69 Always enable colors on Windows, closes #469 2020-04-15 19:23:59 +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 47974b6479 --glob: '*' does not match on path separators 2020-04-15 16:41:56 +02:00
Danny Mösch 2bab4a2249 Add alias -1 for --max-results=1 2020-04-10 21:39:30 +02:00
sharkdp 6c9e743d43 Print path as raw bytes, allowing invalid UTF-8 filenames to be passed to other processes 2020-04-04 18:46:08 +02:00
sharkdp 7e3c69c096 Reimplement dirname, basename, remove_extension for OsStr 2020-04-04 18:46:08 +02:00
sharkdp 4815ee416e Remove process::exit instance 2020-04-03 22:36:32 +02:00
sharkdp 53557ef471 Clean up include order 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 bce95274e3 Proper error handling in main.rs 2020-04-03 22:36:32 +02:00
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