我想用clojure压缩一个文件夹recursevely.这种文件夹的一个例子是
??? a
??? b
? ??? c
? ? ??? ccc.txt
? ??? bb.txt
??? c
??? a.txt
??? b.txt
Run Code Online (Sandbox Code Playgroud)
选项1:在Clojure中使用操作系统
有什么工作zip在Ubuntu是执行按照本结构的根:
zip -r result.zip *
Run Code Online (Sandbox Code Playgroud)
但是你必须在工作目录中才能做到这一点.使用绝对路径将产生其他结果并且省略所有路径将使结构变得平坦.
问题是你不能改变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)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |