如何使用Clojure递归压缩文件夹

彼德

我想用clojure递归压缩一个文件夹。这样的文件夹的一个例子是

├── a
├── b
│   ├── c
│   │   └── ccc.txt
│   └── bb.txt
├── c
├── a.txt
└── b.txt

选项1:从Clojure内部使用操作系统

有什么工作zip在Ubuntu是执行按照本结构的根:

zip -r result.zip *

但是您必须在工作目录中才能执行此操作。使用绝对路径将产生其他结果,而完全省略路径将使结构变平。

问题是您无法在Clojure中更改工作目录,不是我知道的那样。

选项2:使用本机Clojure(或Java)

这应该是可能的,并且我在Clojure或Java包装器中找到了一些zip实现。但是,其中大多数仅用于单个文件。

这可能是一个解决方案:http : //www.java-forums.org/blogs/java-io/973-how-work-zip-files-java.html

但是在尝试之前,我想现在还是周围没有一个好的Clojure库。

凯尔

clojure.core / file-seq这样的事情怎么样

(require '[clojure.java.io :as io])
(import '[java.util.zip ZipEntry ZipOutputStream])

(with-open [zip (ZipOutputStream. (io/output-stream "foo.zip"))]
  (doseq [f (file-seq (io/file "/path/to/directory")) :when (.isFile f)]
    (.putNextEntry zip (ZipEntry. (.getPath f)))
    (io/copy f zip)
    (.closeEntry zip)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章