繁体   English   中英

如何在脚本 elixir 中将文件夹的所有文件从另一个文件夹移动到同一个 S3 存储桶

[英]How to move all files of folder from another folder to same S3 bucket in script elixir

我正在制作一个脚本,需要将所有文件从第三个文件夹移动到主文件夹,并且在该列表中还有那些已经在正确文件夹中的文件,我需要忽略它们。

像这样: my_bucket/files/id/file.txtmy_bucket/files/file.txt

我的代码是这样的,它只列出对象,它没有移动

我试试这段代码:

defmodule Script.Elixir do
 
  
  def list_objects_in_bucket do
    "my_bucket"
    |> ExAws.S3.list_objects(max_keys: 1000)
    |> ExAws.request()
    |> extract_only_route()
  end

  def copy_object(origin_path) do
    ExAws.S3.put_object_copy(
      "my_bucket/",
      "/my_folder_destiny/",
      "my_bucket",
      origin_path
    )
    |> ExAws.request()
  end

  defp extract_only_route({:ok, %{body: %{contents: contents}}}) do
    Enum.map(contents, fn %{key: route} -> route end)
  end

end

一旦你有了带有list_objects_in_bucket/0的文件列表,和一个经过测试的copy_object/2 function,接受 arguments fromto ,你可能会做一些像

@bucket "my_bucket/"
@top "files/"
@nested "id/"

# https://hexdocs.pm/ex_aws_s3/ExAws.S3.html#put_object_copy/5
copy_object = fn from, to ->
  @bucket
  |> ExAws.S3.put_object_copy(to, @bucket, from)
  |> ExAws.request()
end

for @bucket <> @top <> @nested <> name <- list_objects_in_bucket() do
  copy_object.(@top <> @nested <> name, @top <> name)
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM