s3cmd:尝试复制多个文件时出现 KeyError:‘dest_name’

s3cmd:尝试复制多个文件时出现 KeyError:‘dest_name’

我需要使用 Hive 处理 S3 存储桶中的一些文件。问题是,Hive 显然不喜欢将存储桶用作文件夹,因此我决定在另一个存储桶中创建一个文件夹,并通过 s3cmd 将文件复制到那里。

这是我的命令:

s3cmd -v cp s3://main.bucket/\* s3://temp.bucket/input/

然后 s3cmd 立即声明我有 X 个文件需要传输(通常约为 5k++ 的数量级),然后在复制一个文件后,出现以下错误:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    An unexpected error has occurred.
  Please report the following lines to:
   [email protected]
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Problem: KeyError: 'dest_name'
S3cmd:   1.0.1

Traceback (most recent call last):
  File "/usr/local/bin/s3cmd", line 2006, in <module>
    main()
  File "/usr/local/bin/s3cmd", line 1950, in main
    cmd_func(args)
  File "/usr/local/bin/s3cmd", line 614, in cmd_cp
    subcmd_cp_mv(args, s3.object_copy, "copy", "File %(src)s copied to %(dst)s")
  File "/usr/local/bin/s3cmd", line 604, in subcmd_cp_mv
    dst_uri = S3Uri(item['dest_name'])
KeyError: 'dest_name'

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    An unexpected error has occurred.
    Please report the above lines to:
   [email protected]
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

现在,这真是糟透了。

我认为问题在于 bucket-bucket 传输,因此我决定在 main.bucket 内创建一个文件夹,然后简单地复制其中的所有内容,而不关心要将所有内容复制到的文件夹是否也被复制,从而导致循环或诸如此类的事情,因为那时我已经束手无策了。

新的命令如下:

s3cmd -v cp s3://main.bucket/\* s3://main.bucket/111a/

再次,它只复制了一个文件,并给出了同样的错误。

这是什么意思?我该如何解决这个问题?

谢谢。

PS 如果其他方法都失败了,我想我可以通过 AWS 的 GUI 来完成,但手动检查每个复选框很麻烦。据我所知,如果你向下滚动的时间足够长,它会愚蠢地忘记你上面检查的文件,迫使你以蜗牛般的速度完成它。

如果有一种方法可以一次性选择它们,然后将它们复制粘贴到新目录中,那就太好了。

答案1

您使用的 s3cmd 版本非常老旧。我相信这个错误在过去几年里已经修复了。请使用上游 github.com/s3tools/s3cmd 主分支重试。截至今天,1.5.0-rc1 是最新版本。

相关内容