Amazon web services 基于文件名删除S3对象

Amazon web services 基于文件名删除S3对象,amazon-web-services,powershell,amazon-s3,Amazon Web Services,Powershell,Amazon S3,我想从S3存储桶中删除所有包含关键字“update”的文件。以下脚本将正确读取包含“更新”的文件,但Remove-S3Object命令将删除文件夹和文件夹中的所有文件,而不仅仅是包含“更新”的文件 Set-AWSCredentials -AccessKey $s3AccessKey -SecretKey $s3SecretKey $s3Contents = (Get-S3Object -BucketName "$s3Bucket" -Key "path/test/" -AccessKey $s

我想从S3存储桶中删除所有包含关键字“update”的文件。以下脚本将正确读取包含“更新”的文件,但
Remove-S3Object
命令将删除文件夹和文件夹中的所有文件,而不仅仅是包含“更新”的文件

Set-AWSCredentials -AccessKey $s3AccessKey -SecretKey $s3SecretKey

$s3Contents = (Get-S3Object -BucketName "$s3Bucket" -Key "path/test/" -AccessKey $s3AccessKey -SecretKey $s3SecretKey).Key
Write-Host 'Here are the contents' $s3Contents -ForegroundColor Green

foreach($x in $s3Contents){
    If($x -like '*Update*'){
            (Remove-S3Object -BucketName "$s3Bucket" -Key "$x" -AccessKey $s3AccessKey -SecretKey $s3SecretKey).key
    }
}
完整文件路径如下所示:

Path/user/tier1/manual-retouch/test/File1.UPDATE.jpg
Path/user/tier1/manual-retouch/test/File2.Work.jpg
Path/user/tier1/manual-retouch/test/File3.jpg
如果我将
-Whatif
添加到
Remove-S3Object
中,我将得到以下返回:

假设:对目标执行“Remove-S3Object(DeleteObjects)”操作。

但是,如果没有
-Whatif
,powershell脚本将提示我
是否确实要执行此操作?在目标“”上执行“Remove-S3Object(DeleteObjects)”操作。
4次,将删除所有文件和文件夹

有人能指出我做错了什么吗?

Amazon S3对象的
键(文件名)包含完整路径

以下是密钥示例:

foo.txt
foo-update.txt
invoices/bar.txt
invoices/bar-update.txt
to-be-updated/grok.txt
最后一行显示名为
的文件夹中要更新的对象。事实上,该文件夹实际上并不存在。相反,对象的键(文件名)是
待更新/grok.txt

因此,如果您的代码删除其键中包含
update
的任何对象,那么它将删除
待更新/
文件夹中的所有对象

另外,请注意文件夹不存在。因此,当从“文件夹”中删除最后一个对象时,该文件夹将不再显示。这没什么好担心的。当对象再次放置在该路径中时,它将自动重新出现


(如果您在S3管理控制台中创建了一个文件夹,它实际上会创建一个具有文件夹名称的零长度对象。如果该对象包含单词
update
,则您的代码将删除该对象,这也是删除该文件夹的另一个原因。)

Remove-S3Object命令将删除文件夹和文件夹中的所有文件,而不仅仅是文件名中有更新的文件。您能否提供一个错误删除的文件名示例?请编辑您的问题以显示对象的完整密钥(包括路径)。我已在@JohnRotensteinBefore
Remove-S3Object
命令中添加了一些详细信息,您能否打印要删除的对象的名称?这将有助于您确定问题是出在
if
上,还是出在其他方面。John,我能够让它正常工作,谢谢您的帮助。我将测试一个更大的样本,并确保它的工作正常。谢谢大家!@约翰,约翰,谢谢你的消息。这很有帮助。我已根据您的要求添加了更多细节。