Glob:   Unix-Style globbing in Racket
1 API Functions
glob
in-glob
2 Typed API
3 Globbing 101
4 Credits
6.3.90.900

Glob: Unix-Style globbing in Racket

 (require glob) package: glob

A glob is like a path string, but allows wildcard characters. This library brings Unix-style globbing to Racket.

Typed Racket users should (require glob/typed) for a type-annotated API.You may use glob in a typed module via require/typed; however, bindings from glob/typed may not be used in untyped code.

1 API Functions

procedure

(glob glob-string    
  [#:with-dotfiles? dotfiles?])  (listof path-string)
  glob-string : string
  dotfiles? : boolean = #f
Builds a list of all paths matched by the glob glob-string. Dotfiles are filtered by default unless matched for explicitly. Set the keyword argument to #t to override this behavior.

Examples:
> (glob "*.scrbl")

'()

> (glob "glob*")

'()

> (glob "*.rkt")

'("./info.rkt" "./main.rkt" "./typed.rkt")

procedure

(in-glob glob-string    
  [#:with-dotfiles? dotfiles?])  (sequenceof path-string)
  glob-string : string
  dotfiles? : boolean = #f
Returns a sequence of all paths matched by the glob glob-string, rather than storing each match explicitly in a list. When the keyword argument is #t, returns all matching results including dotfiles.

Examples:
> (let ([tmp (path->string (find-system-path 'temp-dir))])
   (sequence-length (in-glob (string-append tmp "/*"))))

0

> (let ([tmp (path->string (find-system-path 'temp-dir))])
   (sequence-length (in-glob (string-append tmp "/*")
                             #:with-dotfiles? #t)))

0

The matches returned by either function should be exactly the same as those returned by the Unix glob file \. -name glob-path-string. Please submit an issue if you find a counterexample.

2 Typed API

 (require glob/typed) package: glob
Provides a Typed Racket edition of the glob API.

3 Globbing 101

Globs are path strings that may contain the following special characters.

  • * is a wildcard. It means "match anything". For example, (glob "*.rkt") will match all files in the current directory with a .rkt file extension.

  • ? is an option. It means "the previous character might not be there". For example, (glob "*.rktd?") will match all .rkt and all .rktd files in the current directory.

  • Square braces [] are for branching on single characters. The pattern [abc] means "match ’a’, or match ’b’, or match ’c’". For example, (glob "*.[co]") will match all .c and all .o files in the current directory.

Aside from these pattern variables, a glob is just a path-string.

4 Credits

Inspired by the Python glob library.