File system utilities. This library is included in babashka (>= 0.2.9) but can also be used from the JVM.
This library is pretty new. Breaking changes might happen, but we try to avoid them if possible.
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 nate/fs.
API docs are available at babashka.org/fs. Most
functions take a string, java.io.File
or java.nio.file.Path
as input and
return a java.nio.file.Path
. Coercion into a File
or Path
can be done
using fs/file
and fs/path
.
(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 Path
s. 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"
$ clojure -M:test
Static files including compiled JS are hosted on Github. This is set up like described here:
All the commands below assume that you already have a git project initialized and that you are in its root folder.
# Create an orphan branch named gh-pages
git checkout --orphan gh-pages
# Remove all files from staging
git rm -rf .
# Create an empty commit so that you will be able to push on the branch next
git commit --allow-empty -m "Init empty branch"
# Push the branch
git push origin gh-pages
Now that the branch is created and pushed to origin, let’s configure the worktree correctly:
# Come back to master
git checkout master
# Add gh-pages to .gitignore
echo "gh-pages/" >> .gitignore
git worktree add gh-pages gh-pages
After cloning this repo to a new dir:
git fetch origin gh-pages
git worktree add gh-pages gh-pages
To deploy to Github Pages:
script/release
Copyright © 2020-2021 Michiel Borkent
Distributed under the EPL License, same as Clojure. See LICENSE.
Can you improve this documentation?Edit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close