GithubHelp home page GithubHelp logo

montana / bfs Goto Github PK

View Code? Open in Web Editor NEW

This project forked from tavianator/bfs

0.0 2.0 0.0 878 KB

A breadth-first version of the UNIX find command

License: BSD Zero Clause License

Makefile 0.79% Roff 3.69% C 84.65% Shell 10.87%

bfs's Introduction

bfs

License LOC Build Status

Breadth-first search for your files.

bfs is a variant of the UNIX find command that operates breadth-first rather than depth-first. It is otherwise intended to be compatible with many versions of find, including

If you're not familiar with find, the GNU find manual provides a good introduction.

Breadth vs. depth

The advantage of breadth-first over depth first search is that it usually finds the file(s) you're looking for faster. Imagine the following directory tree:

haystack
├── deep
│   └── 1
│       └── 2
│           └── 3
│               └── 4
│                   └── ...
└── shallow
    └── needle

find will explore the entire deep directory tree before it ever gets to the shallow one that contains what you're looking for.

$ find haystack
haystack
haystack/deep
haystack/deep/1
haystack/deep/1/2
haystack/deep/1/2/3
haystack/deep/1/2/3/4
...
haystack/shallow
haystack/shallow/needle

On the other hand, bfs lists files from shallowest to deepest, so you never have to wait for it to explore an entire unrelated subtree.

$ bfs haystack
haystack
haystack/deep
haystack/shallow
haystack/deep/1
haystack/shallow/needle
haystack/deep/1/2
haystack/deep/1/2/3
haystack/deep/1/2/3/4
...

Easy

bfs tries to be easier to use than find, while remaining compatible. For example, bfs is less picky about where you put its arguments:

$ find -L -name 'needle' haystack
find: paths must precede expression: haystack
$ bfs -L -name 'needle' haystack
haystack/needle

$ find haystack -L -name 'needle'
find: unknown predicate `-L'
$ bfs haystack -L -name 'needle'
haystack/needle

$ find -L haystack -name 'needle'
haystack/needle
$ bfs -L haystack -name 'needle'
haystack/needle

bfs also adds some extra options that make some common tasks easier. Compare bfs -nohidden to

find -name '.?*' -prune -o -print

Pretty

When bfs detects that its output is a terminal, it automatically colors its output with the same colors ls uses. This makes it easier to identify relevant files at a glance.

Screenshot

Try it!

To get bfs, download one of the releases or clone the git repo. Then run

$ make

This will build the bfs binary in the current directory. You can test it out:

$ ./bfs -nohidden

If you're interested in speed, you may want to build the release version instead:

$ make clean
$ make release

Finally, if you want to install it globally, run

$ sudo make install

Alternatively, bfs may already be packaged for your distribution of choice:

Packaging status

For example:

# apt install bfs                  # Debian/Ubuntu
# brew install tavianator/tap/bfs  # macOS Homebrew

bfs's People

Contributors

tavianator avatar lamby avatar lugoues avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.