File system utilities. This library can used from:
Babashka is a scripting utility. It's convenient to have cross platform file
system utilities available for scripting. The namespace clojure.java.io
already offers a bunch of useful features, but it predates java.nio. The nio
package isn't that nice to use from Clojure and this library should help with
that.
The main inspirations for this library are clojure.java.io, clj-commons/fs and corasaurus-hex/fs.
See API.md.
(require '[babashka.fs :as fs])
(fs/directory? ".") ;;=> true
The glob function takes a root path and a pattern. The pattern is interpreted
as documented
here.
(map str (fs/glob "." "**{.clj,cljc}"))
Output:
("project.clj" "test/babashka/fs_test.clj" "src/babashka/fs.cljc")
The function exec-paths returns all entries from PATH as Paths. To search
all these directories for an executable, e.g. java, you can combine it with
list-dirs which searches files directly in the directories using an (optional)
glob pattern:
(str (first (filter fs/executable? (fs/list-dirs (filter fs/exists? (fs/exec-paths)) "java"))))
"/Users/borkdude/.jenv/versions/11.0/bin/java"
For convenience, the above use case is also supported using the which function:
(str (fs/which "java"))
"/Users/borkdude/.jenv/versions/11.0/bin/java"
Behaviour can vary on different file systems and OSes. If you uncover some interesting nuance, please let us know.
The underlying JDK file APIs (and, by extension, babashka.fs) typically consider an empty-string path "" to be the current working directory. This means that (fs/list-dir "") is functionally equivalent to (fs/list-dir ".").
Depending on which OS and JDK version you are running, creation-time might return unexpected results.
As of this writing, our testing has revealed:
See JDK-8316304.
Depending on which OS and JDK version you are running, set-creation-time might not do what you would expect.
As of this writing, our testing has revealed:
See JDK-8151430
Many babashka.fs functions accept the :nofollow-links option.
These functions will follow symbolic links unless you pass in {:nofollow-links true}.
Some babashka.fs functions accept the :follow-links option.
These function will not follow symbolic links unless you pass in {:follow-links true}.
$ bb test-all
Copyright © 2020-2025 Michiel Borkent
Distributed under the EPL License, same as Clojure. See LICENSE.
Can you improve this documentation? These fine people already did:
Michiel Borkent, Lee Read, Alex Sheluchin & Cora SuttonEdit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |