xarg / fnd

A better find. Not really, but easier to use for simple things.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

fnd

https://secure.travis-ci.org/humanfromearth/fnd.png?branch=master

A golang implementation of the popular find unix utility.

The main reason I coded this is because I find myself writing this a lot:

find -iname "*x*"

Instead I want to write:

fnd x

That's the whole philosophy really.

Install

go get -u github.com/xarg/fnd

Example

fnd <pattern> <path>

$ ls .
dir1
$ fnd # just list the directory
./dir1
$ touch dir1/y; touch ./dir1/2; touch ./dir1/x2 #create a few example files
$ fnd y
./dir1/y
$ fnd 2 # matches *2*
./dir1/2
./dir1/x2
$ mkdir -p dir2/y
$ fnd y ./dir1 # search just in ./dir1
./dir1/y

Regexp example

fnd -e <regexp> <path>

$ fnd -e x$ # ends with x
$ fnd -e ^x # starts with x
./dir1/x2
$ fnd -e y$ ./dir2 #search regexp in a directory
./dir2/y

Development

If you want to play with it

Testing

$ go test -v
=== RUN TestUnixRegexp
--- PASS: TestUnixRegexp (0.00 seconds)
=== RUN TestFindSimple
--- PASS: TestFindSimple (0.00 seconds)
=== RUN TestFindLevels
--- PASS: TestFindLevels (0.05 seconds)
=== RUN TestFindUnixPatternQue
--- PASS: TestFindUnixPatternQue (0.00 seconds)
=== RUN TestFindUnixPatternStar
--- PASS: TestFindUnixPatternStar (0.00 seconds)
=== RUN TestFindRegexp
--- PASS: TestFindRegexp (0.00 seconds)
=== RUN TestFindCaseSensitive
--- PASS: TestFindCaseSensitive (0.00 seconds)
=== RUN TestFindFileType
--- PASS: TestFindFileType (0.05 seconds)
=== RUN TestFindFileTypeSymLink
--- PASS: TestFindFileTypeSymLink (0.00 seconds)
PASS
ok  fnd  0.110s

Benchmarking

$ go test -c # this creates fnd.test. This step is required in order to use it with the profiler.
$ ./fnd.test -test.bench="." -test.cpuprofile="fnd_cpu.prof" -test.memprofile="fnd_mem.prof"
PASS
BenchmarkFind      50000             36418 ns/op
$ go tool pprof fnd.test fnd_cpu.prof
Welcome to pprof!  For help, type 'help'.
(pprof) top10
Total: 93 samples
     32  34.4%  34.4%       42  45.2% runtime.FixAlloc_Free
     29  31.2%  65.6%       93 100.0% fmt.Fprintln
      6   6.5%  72.0%       19  20.4% runtime.MHeap_Alloc
      5   5.4%  77.4%       12  12.9% path/filepath.Clean
      3   3.2%  80.6%        9   9.7% runtime.MCache_Free
      3   3.2%  83.9%        6   6.5% runtime.MCentral_FreeList
      2   2.2%  86.0%        2   2.2% fmt.(*fmt).pad
      2   2.2%  88.2%       22  23.7% runtime.MGetSizeClassInfo
      2   2.2%  90.3%        9   9.7% runtime.isNaN
      1   1.1%  91.4%        1   1.1% flag.(*FlagSet).Parse

Possible features to come:

  • match terminal highlighting
  • date search
  • optional depth
  • conditionals like: -or -and
  • configuration file.

About

A better find. Not really, but easier to use for simple things.

License:MIT License


Languages

Language:Go 100.0%