【问题标题】:AWS S3 - Use powershell to delete all files but keep the foldersAWS S3 - 使用 powershell 删除所有文件但保留文件夹
【发布时间】:2021-09-23 15:59:31
【问题描述】:

我有一个 powershell 脚本,它从 S3 存储桶下载所有文件,然后从存储桶中删除文件。我要删除的所有文件都存储在 S3 存储桶的子文件夹中,我只想删除文件但保留子文件夹。

从 S3 下载文件后,我目前正在使用以下命令删除 S3 中的文件。

 Remove-S3Object -BucketName $S3Bucket -Key $key -Force 

我的问题是,如果它删除了子文件夹中的所有文件,子文件夹也会被删除。有没有办法删除文件,但使用 powerhsell 保留子文件夹。我相信我可以做这样的事情,

aws s3 rm s3://<key_to_be_removed> --exclude "<subfolder_key>"

但不太确定这是否可行。

我正在寻找完成此任务的最佳方法,目前,如果子文件夹不再存在,我唯一的选择是通过脚本重新创建子文件夹。

【问题讨论】:

  • 不,没有办法。原因:S3 本身没有文件夹,您的对象有路径或键,如果该路径包含斜杠,则存在“文件夹”(在 UI 中),如果不存在键为 /sub/something.file 的对象,则存在“文件夹” sub 也不存在。
  • 您可以添加一个空文件,其中的键是文件夹。我相信甚至有一种内容类型表明它是一个文件夹。如果您使用“创建文件夹”,这就是 AWS 在控制台中所做的。
  • “消失的文件夹”如何给您带来问题?是否特别需要保留空文件夹?

标签: amazon-web-services powershell amazon-s3 aws-cli aws-powershell


【解决方案1】:

实现空文件夹的唯一方法是创建一个长度为零的对象,该对象与您要保留的文件夹同名。这实际上是 S3 控制台使您能够创建空文件夹的方式。

您可以通过运行$ aws s3 ls s3://your-bucket/folderfoo/ 并观察一个长度为零字节的输出对象来检查这一点。

查看有关此主题的更多信息here

【讨论】:

    【解决方案2】:

    如前所述,S3 并没有像文件系统那样真正拥有文件夹。大多数 S3 浏览器显示的文件夹只是根据文件/对象的路径生成的。如果您上传一个名为folder/file 的对象/文件,浏览器会将folder 显示为文件夹,而file 将显示为文件夹中的一个文件。但从技术上讲,只有文件/对象folder/filefolder 本身并不存在。

    您可以通过使用“在文件夹中”创建一个空的空名称对象来显式创建文件夹:folder/。如果这样做,即使文件夹中没有文件,它也会显示该文件夹存在。但如果你不这样做,一旦你删除文件夹中的所有对象,虚拟文件​​夹就会消失。

    现在的问题是您的命令是否会删除表示文件夹的空命名对象。我说不出来。

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      相关资源
      最近更新 更多