如何压缩Elixir中的目录?

Low*_*ong 5 elixir

我知道如何在Elixir中以写入模式打开一个zip文件:

file = File.open("myzip.zip", [:write, :compressed])

但在此之后,如果我有一个目录/home/lowks/big_files,我怎么写这个file

bit*_*ker 9

如果您正在使用zip文件,则需要使用:zip.extract('foo.zip'),和:zip.create(name, [{'foo', file1data}, file2path, ...]).

:zip.create 获取一个名称,以及一个可以包含两个选项之一的列表:

  1. 包含文件名的元组和要压缩的二进制数据.
  2. 压缩文件的路径.

:zip.extract可以采用文件的路径,也可以采用代表zip存档的二进制数据(也许是从File.openzip上做).

您可以执行以下操作以获取路径中的文件列表并将其压缩:

files = File.ls!(path)
        |> Enum.map(fn filename -> Path.join(path, filename) end)
        |> Enum.map(&String.to_char_list!/1)

:zip.create('foo.zip', files)
Run Code Online (Sandbox Code Playgroud)