s3://bucketname/yyyymmdd/foo/bar
我在根目录中有一些文件,我想复制它们。我不想将任何子目录复制到根目录 (foo)。我在 powershell 中尝试这样做:
aws s3 cp "s3://bucketname" . --recursive --exclude "*/foo/*/*" --include "foo/*.*" --dryrun
或者
aws s3 cp "s3://bucketname" . --recursive --exclude "yy*/foo/*/*" --include "foo/*.*" --dryrun
我获取了 foo 中的文件,但也获取了一些存储的文件,例如s3://bucketname/otherdirectory/otherfiles
。我尝试了一些替代方法:这似乎列出了存储桶中的每个文件:
aws s3 cp "s3://bucketname" . --recursive --exclude "*/foo/*/*" --include "*/foo/*.*" --dryrun
我的直觉告诉我应该如此
aws s3 cp source destination --recursive --exclude "*" --include "*/foo/*.*" --dryrun
意思是/directory/*anyfilename.*anyextention
,但是这会给我下面递归的每个文件s3://bucketname/yyyymmdd/foo/
。
我正在尝试编写一个没有 foreach 模式的单行代码,但我可能不得不诉诸于此。
答案1
弄清楚了:
(get-s3object -bucket bucketname | where{$_.key -like "*/foo/*"} | where{$_.key -notlike "*/foo/*/*"}).key
此列表仅列出 foo 中没有子文件夹或子文件夹文件的文件。无论存储桶的 YYYYMMDD 如何,它都会执行此操作。我现在可以将其传送到 read-s3object 以获取文件。
get-s3object -bucket bucketname | where{$_.key -like "*/foo/*"} | where{$_.key -notlike "*/foo/*/*"} | read-s3object -folder .