un approccio semplice e veloce sarebbe quella di fare un vettore di dirs per creare e mappa mkdir su di esso:
user> (map #(.mkdir (java.io.File. %)) ["a", "a/b" "a/b/c"])
(true true true)
oppure è possibile specificare la struttura dir come un albero e utilizzare cerniere per camminare fare il dirs sul modo:
(def dirs ["a" ["b" ["b1" "b2"]] ["c" ["c1"]]])
(defn make-dir-tree [original]
(loop [loc (zip/vector-zip original)]
(if (zip/end? loc)
(zip/root loc)
(recur (zip/next
(do (if (not (vector? (zip/node loc)))
(let [path (apply str (interpose "/" (butlast (map first (zip/path loc)))))
name (zip/node loc)]
(if (empty? path)
(.mkdir (java.io.File. name))
(.mkdir (java.io.File. (str path "/" name))))))
loc))))))
(make-dir-tree dirs)
.
[email protected]:~/hello$ find a
a
a/c
a/c/c1
a/b
a/b/c
a/b/b2
a/b/b1
Se si sta eseguendo un sacco di amministrazione dei sistemi generali, è possibile che sia necessario qualcosa di più pesante. Il pallet project è una libreria per l'amministrazione di sistema di tutti i tipi su sistemi host fisici e cloud (anche se tende a inclinarsi verso il materiale nuvoloso). Nello specifico il
fonte
2013-02-12 20:08:26
'make-parents' potrebbe essere utile https://clojuredocs.org/clojure.java.io/make-parents – xhh