Amazon web services 基于文件名删除S3对象
我想从S3存储桶中删除所有包含关键字“update”的文件。以下脚本将正确读取包含“更新”的文件,但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
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命令将删除文件夹和文件夹中的所有文件,而不仅仅是文件名中有更新的文件。您能否提供一个错误删除的文件名示例?请编辑您的问题以显示对象的完整密钥(包括路径)。我已在@JohnRotensteinBeforeRemove-S3Object
命令中添加了一些详细信息,您能否打印要删除的对象的名称?这将有助于您确定问题是出在if
上,还是出在其他方面。John,我能够让它正常工作,谢谢您的帮助。我将测试一个更大的样本,并确保它的工作正常。谢谢大家!@约翰,约翰,谢谢你的消息。这很有帮助。我已根据您的要求添加了更多细节。