我想用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] 删除。
我来说两句