如何在Amazon S3中重命名文件和文件夹?

Sha*_*han 169 amazon-s3 amazon-web-services

是否有任何功能可以在Amazon S3中重命名文件和文件夹?任何相关的建议也欢迎.

小智 414

我刚测试了这个并且它有效:

aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to>
Run Code Online (Sandbox Code Playgroud)

  • 没有AWS没有原子移动操作 (12认同)
  • 它是原子的吗?在第一次执行时,第二个(和相同的)命令会失败吗? (9认同)
  • 这是它的工作原理 https://docs.aws.amazon.com/cli/latest/reference/s3/mv.html mv = copy + rm (6认同)
  • 不幸的是,s3 mv 并不像 Linux mv 那样简单地进行元数据更改。由于s3 mv的实现方式类似于cp+rm,因此操作会运行很长时间,消耗较高的I/O,并且暂时需要双倍存储。 (5认同)
  • 谢谢!为什么我们需要`--recursive`? (3认同)
  • @AzizAlto如果在s3:// &lt;bucketname&gt; / &lt;folder_name_from&gt;下有更深的文件夹结构,即s3:// &lt;bucketname&gt; / &lt;folder_name_from&gt; / some / deeper / folders。 (2认同)
  • @JohnEikenberry 我不敢相信 Raj 的错误评论有 15 票赞成。它应该被删除。编辑:它刚刚被删除。好的。 (2认同)
  • 值得一提的是,运行这个命令应该是“免费的”。&gt;&gt; “在 S3 存储桶之间或从 Amazon S3 到同一 AWS 区域内的任何服务的传输都是免费的。” 来源:[Amazon S3 定价 - 数据传输](https://aws.amazon.com/s3/pricing/) (2认同)

小智 47

在s3中没有直接重命名文件的方法.你要做的是用新名称复制现有文件(只需设置目标密钥)并删除旧文件.

  • 提供您的答案示例,否则发表评论. (96认同)
  • 这是错误的答案.您可以使用mv在S3上移动文件.mv =重命名 (41认同)
  • @EternalHour会很好..但是没有必要..这个问题甚至没有任何关于语言的迹象......那么做一个例子有什么意义呢? (33认同)
  • 这是一个错误的答案,原因有两个:1)您可以使用GUI右键单击并重命名文件,2)如前所述,您可以使用move命令或通过sdk移动文件. (17认同)
  • 您无法右键单击文件夹名称以在S3上重命名它. (8认同)
  • 有'aws s3 mv`命令,但它会在幕后出现复制和删除而不是重命名对象.此详细信息非常重要,因为复制会导致每GB成本,而简单重命名则不会. (3认同)
  • 从最近的 S3 UI 更新开始,情况已不再如此。现在,您可以从 Web 控制台选择一个对象,单击“操作”下拉列表,然后单击“重命名对象”。但是,它只是创建旧文件的副本并删除旧文件,从而导致元数据丢失。 (3认同)

Tha*_*ran 23

aws s3 cp s3://source_folder/ s3://destination_folder/ --recursive
aws s3 rm s3://source_folder --recursive
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢cp/rm而不是mv,因为你可以在删除之前检查副本是否成功. (10认同)
  • `cp`后跟`rm`比`mv`更好? (6认同)
  • 您可以使用 --dryrun 标志来检查命令的输出,而无需实际运行它。 (5认同)

Cav*_*vaz 19

您可以使用AWS CLI命令mv处理文件


小智 17

要重命名文件夹(从技术上讲,这是一组具有公共前缀作为键的对象),您可以使用aws带有选项的 CLI move 命令--recursive

aws s3 mv s3://bucket/old_folder s3://bucket/new_folder --recursive
Run Code Online (Sandbox Code Playgroud)


Tom*_*Tom 15

我刚刚开始工作了.您可以像这样使用AWS SDK for PHP:

use Aws\S3\S3Client;

$sourceBucket = '*** Your Source Bucket Name ***';
$sourceKeyname = '*** Your Source Object Key ***';
$targetBucket = '*** Your Target Bucket Name ***';
$targetKeyname = '*** Your Target Key Name ***';        

// Instantiate the client.
$s3 = S3Client::factory();

// Copy an object.
$s3->copyObject(array(
    'Bucket'     => $targetBucket,
    'Key'        => $targetKeyname,
    'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
));
Run Code Online (Sandbox Code Playgroud)

http://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectUsingPHP.html


小智 12

我们有两种方法可以重命名 AWS S3 存储上的文件 -

1. 使用 CLI 工具 -

aws s3 --recursive mv s3://bucket-name/dirname/oldfile s3://bucket-name/dirname/newfile

2.使用SDK

$s3->copyObject(array(
'Bucket'     => $targetBucket,
'Key'        => $targetKeyname,
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",));
Run Code Online (Sandbox Code Playgroud)


小智 11

您可以使用AWS CLI或s3cmd命令重命名AWS S3存储桶中的文件和文件夹.

使用S3cmd,使用以下语法重命名文件夹,

s3cmd --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>
Run Code Online (Sandbox Code Playgroud)

使用AWS CLI,使用以下语法重命名文件夹,

aws s3 --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>
Run Code Online (Sandbox Code Playgroud)


orc*_*man 7

无法通过GUI重命名文件夹,实现此目的的最快(最简单,如果您喜欢GUI)方法是执行普通的旧副本.要实现此目的:使用GUI在S3上创建新文件夹,转到旧文件夹,选择全部,标记"复制",然后导航到新文件夹并选择"粘贴".完成后,删除旧文件夹.

这个简单的方法非常快,因为它是从S3复制到自身(不需要重新上传或类似的东西),它还像你期望的那样维护复制对象的权限和元数据.


Ale*_*lex 6

以下是您在 .NET 中使用的方法S3 .NET SDK

var client = new Amazon.S3.AmazonS3Client(_credentials, _config);
client.CopyObject(oldBucketName, oldfilepath, newBucketName, newFilePath);
client.DeleteObject(oldBucketName, oldfilepath);
Run Code Online (Sandbox Code Playgroud)

PS尽量使用客户端方法的“异步”版本,即使我没有这样做以提高可读性


Jet*_*hro 6

现在可以使用“文件”,选择文件,然后在GUI中选择“更多”>“重命名”。

要重命名文件夹,您必须创建一个新文件夹,然后选择旧文件夹的内容并复制/粘贴(在“更多”下)


Tec*_*ort 5

这适用于重命名同一文件夹中的文件

aws s3  mv s3://bucketname/folder_name1/test_original.csv s3://bucket/folder_name1/test_renamed.csv
Run Code Online (Sandbox Code Playgroud)