我希望使用clojure模仿cp -R
。是否有一种惯用的方式来编写这个函数,以便递归地复制目录的全部内容?
答案 0 :(得分:0)
(鉴于对此答案仍然有兴趣):
一个人可以将Java java.io.File
与clojure的file-seq
一起使用:
(require '[clojure.java.io :as io])
(->> "/path"
(io/file)
(file-seq)
(run! (your-fn-that-copies-files-and-creates-folders)))
file-seq
将为您的文件/文件夹返回tree-like structure。
为了从根源开始保持一致的目录结构,我们必须采取绝对路径并将其转换为相对路径:
(require '[clojure.string :as str]
'[clojure.data :as data])
(defn- path->chunks [file] (str/split (.getAbsolutePath file) #"/"))
(defn path->relative [root file]
(str/join "/" (filter some? (second (data/diff (path->chunks root)
(path->chunks file))))))
您可以结合所有这些来执行递归副本。