An open API service indexing awesome lists of open source software.

https://github.com/brglng/bfind

find in breadth-first order
https://github.com/brglng/bfind

rust

Last synced: 2 months ago
JSON representation

find in breadth-first order

Awesome Lists containing this project

README

        

# bfind

![build](https://github.com/brglng/bfind/actions/workflows/rust.yml/badge.svg)

A [GNU Find](https://www.gnu.org/software/findutils/)-like tool, but uses breadth-first search instead of depth-first search, written in [Rust](https://www.rust-lang.org/).

## Why

* BFS prefers files that are shallower, which means files in shallower directories are more likely to be found in a shorter time.
* When encountering a subdirectory which has many very deep subdirectories, BFS doesn't stuck on it before moving to the next subdirectory.
* I want to learn Rust by making this tool.

**NO WARRANTY:** I make this tool mainly for my personal use. I have no plan to improve its performance or features, neither are issues guaranteed to get fixed. However, PR is welcome.

## Build

```sh
$ cargo build
```

Or for the release version

```sh
$ cargo build --release
```

## Install

```sh
$ cargo install --path .
```

## Usage

**NOTE: Currently, only basic directory listing is implemented.**

List current working directory:

```sh
$ bfind
```

List a specific directory:

```sh
$ bfind /path/to/directory
```

Find a file with regular expression:

```sh
$ bfind . -- name match 'foo.*'
```

Find a file with glob:

```sh
$ bfind . -- name glob 'foo*'
```

Combining conditions:

```sh
$ bfind . -- name glob 'foo*' and type is dir
```

Print with formatting:

```sh
$ bfind . print 'file: {name:10}, {size:>10} bytes' -- name glob 'foo*' and size gt 1MiB
```

Execute a command:

```sh
$ bfind . exec cat '{fullpath}' -- name glob 'foo*.txt'
```

## TODO

- Design a simple and powerful command line syntax.
- Implement the command line interface.