【问题标题】:How do you rename a folder in a bucket on S3?如何在 S3 上重命名存储桶中的文件夹?
【发布时间】:2011-03-25 11:06:25
【问题描述】:

听起来很简单,但似乎是一项非常复杂的任务。

【问题讨论】:

  • @John,如果你甚至编辑过什么?
  • 我发现 CloudBerry for windows 可以工作。但我讨厌窗户。有人知道mac替代品吗?
  • 我有一个脚本可以执行此操作 - 给我发电子邮件(zach at longtailvideo dot com),我会转发。
  • @Trip 您可以通过单击编辑的时间戳查看 John 的编辑。在这种情况下,他删除了不相关的标签。

标签: ruby rubygems amazon-s3 bucket


【解决方案1】:

如果您使用 S3 管理控制台,则可以剪切和粘贴。进入您想要的文件夹,单击 Ctrl + A,然后单击操作 > 剪切。创建新文件夹,然后单击操作 > 粘贴。

【讨论】:

    【解决方案2】:

    好像AWS Command Line Interface 是做这样的事情的新方法。使用它,您可以像这样重命名文件夹:

    aws s3 mv --recursive s3://bucketname/oldfoldername s3://bucketname/newfoldername
    

    请务必从 --dryrun 选项开始,以确保它会按照您的想法进行操作。

    【讨论】:

      【解决方案3】:

      如果您使用的是 aws-s3 gem,以下代码会将存储桶 BUCKET_NAME 中的文件夹 OLD_FOLDER_NAME 重命名为 NEW_FOLDER_NAME:

      bsize = OLD_FOLDER_NAME.size
      bucket = AWS::S3::Bucket.find(BUCKET_NAME)
      bucket.objects({:prefix=>OLD_FOLDER_NAME}).each do |o|
        AWS::S3::S3Object.rename(o.key, NEW_FOLDER_NAME + o.key[bsize..-1], BUCKET_NAME)
      end
      

      就是这样。文件夹不是真正的对象,因此您所要做的就是将最终在该特定路径中的所有对象重命名为新路径。结果,虚拟文件​​夹将被重命名。

      【讨论】:

      • 这会重命名文件夹,但是,如果文件夹的内容是公开的,那么在重命名过程中这些权限似乎会丢失。
      • 添加显式权限作为 rename() 的第 4 个参数设置权限 :access => :public_read 尽管可能有一些方法可以在重命名期间保留权限
      【解决方案4】:

      使用 BucketExplorer!这是一个很棒的应用程序!您可以在一个非常易于理解的 GUI 中对您的 s3 执行几乎任何您想做的事情

      【讨论】:

      • 不,老实说,我仍然对想法持开放态度,但这是我找到的最佳选择。
      • 我同意如果不是因为这个解决方案需要安装 Java7,它可以引入相当多的系统级更改来重命名文件夹。太糟糕了,他们不会将其重写为“真正的”应用程序,而不会因为 Java 依赖项而头疼。
      猜你喜欢
      • 2011-01-29
      • 2017-05-21
      • 2014-06-15
      • 2018-06-03
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      相关资源
      最近更新 更多