微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于删除 S3 存储桶中文件的本机 PowerShell ForEach 循环

如何解决用于删除 S3 存储桶中文件的本机 PowerShell ForEach 循环

我正在尝试编写一个简单的 PowerShell 脚本来从 AWS S3 存储桶中删除文件。我无法从循环中的项目中正确拆分文件名。

如何正确选择文件名?

示例记录名称

2021-06-07 16:08:15    1876349 20210502210533.csv
2021-06-07 16:44:53    1858461 210502210533.csv
2021-06-07 16:18:39  276597534 20210424203918.csv

示例脚本:

$all_files=aws s3 ls s3://bucket.host.com/folder1/folder2/folder3/folder4/ --profile dev

foreach($file in $all_files)
{
    aws s3 rm s3://bucket.host.com/folder1/folder2/folder3/folder4/$file.Split(' ')[6] --profile dev
}

结果:

delete: s3 ls s3://bucket.host.com/folder1/folder2/folder3/folder4/2021-06-07 16:44:53    1858461 20210502210533.csv.Split
delete: s3 ls s3://bucket.host.com/folder1/folder2/folder3/folder4/2021-06-07 16:18:39  276597534 20210424203918.csv.Split
delete: s3 ls s3://bucket.host.com/folder1/folder2/folder3/folder4/2021-06-07 15:50:41  276597534 20210424204122.csv.Split

注意整个记录是如何存在的(没有发生分裂)。我如何可靠地拆分它?

编辑 1:

$all_files=aws s3 ls s3://bucket.host.com/folder1/folder2/folder3/folder4/ --profile dev
PS C:\Users\me> $all_files
2021-06-08 02:50:37 4637885036 20210425202931.csv
2021-06-08 02:53:23 4753217891 20210426204043P.csv
2021-06-08 02:59:10 4838159267 20210426204346.csv
2021-06-08 02:58:07 4871146830 20210426204407.csv
2021-06-08 03:00:24 4641073848 20210427203146.csv
2021-06-08 02:52:29 4633473584 20210427203836.csv
2021-06-08 02:57:55 4633473584 20210427204657.csv
2021-06-08 02:56:25 4633473584 20210428203618.csv
2021-06-08 02:53:30 4633473584 20210429204253.csv
PS C:\Users\me> ForEach($file in $all_files){$command = 'aws s3 rm s3://bucket.host.com/folder1/folder2/folder3/folder4/' + $file.Split(' ')[-1] + ' --profile dev' & $command}

At line:1 char:177
+ ... folder3/folder4/' + $file.Split(' ')[-1] + ' --profile vis_dev' & $comman ...
+                                                                 ~
Unexpected token '&' in expression or statement.
    + CategoryInfo          : ParserError: (:) [],ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

如果我将 & $command 放在最后,然后运行 ​​Invoke-Expression $command 作为第二个表达式,最后一个文件将被删除

& $command 如何作为循环的一部分运行?

解决方法

试试这个:

AType

如果您只是使用普通字符串连接,这应该会输出您要查找的内容。

如果您打算使用字符串 BType 方法进行拆分,那么您对索引 type AType = { A1Prop: string A2Prop: string SharedProp: string } type BType = { B1Prop: string B2Prop: string SharedProp: string } type ABType = AType & BType const someObject: ABType = { A1Prop: 'string',A2Prop: 'string',B1Prop: 'string',B2Prop: 'string',SharedProp: 'string' } const AllPropsOfA : AType = someObject // ok const AllPropsOfB : BType = someObject // ok 的依赖是有问题的。 const ATypeProps = ['A1Prop','A2Prop','SharedProp'] as const const BTypeProps = ['B1Prop','B2Prop','SharedProp'] as const type ATypeKeys = typeof ATypeProps[number] type BTypeKeys = typeof BTypeProps[number] type AType = { [K in ATypeKeys]: string } type BType = { [K in BTypeKeys]: string } const someObject = { A1Prop: 'string',SharedProp: 'string' } const pick = <T,K extends keyof T>(obj: T,keys: readonly K[]): Pick<T,K> => { const result = {} as Pick<T,K> keys.forEach((key) => result[key] = obj[key]) return result } const AllPropsOfA: AType = pick(someObject,ATypeProps) /* { "A1Prop": "string","A2Prop": "string","SharedProp": "string" } */ const AllPropsOfB: BType = pick(someObject,BTypeProps) /* { "B1Prop": "string","B2Prop": "string","SharedProp": "string" } */ 只会为您提供结果数组中的最后一个元素。

如果您希望将结果字符串作为命令执行,我会将其分配给一个变量并包含其他必需的参数,然后使用调用运算符 ($All_Files = @( '2021-06-07 16:08:15 1876349 20210502210533.csv' '2021-06-07 16:44:53 1858461 210502210533.csv' '2021-06-07 16:18:39 276597534 20210424203918.csv' ) ForEach($File in $All_Files) { 'aws s3 rm s3://bucket.host.com/folder1/folder2/folder3/folder4/' + $file.Split(' ')[-1] } ) 来执行它。

.Split()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。