使用aws客户端仅从单个目录复制s3文件(非递归)

时间:2019-07-16 16:57:43

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

考虑以下方面的aws bucket / key结构

 myBucket/dir1/file1
 myBucket/dir1/file2
 myBucket/dir1/dir2/dir2file1
 myBucket/dir1/dir2/dir2file2

使用时:

 aws s3 cp  --recursive s3://myBucket/dir1/ .

然后,我们将复制dir2file[1,2]file[1,2]。如何只复制后面的文件而不复制子目录下的文件?

回复评论:。我对每个子目录都没有放置--exclude并不感兴趣,所以这不是excluding directories from aws cp

的重复项

3 个答案:

答案 0 :(得分:1)

您可以使用--exclude选项排除路径,例如

aws s3 cp s3://myBucket/dir1/ . --recursive --exclude "dir1/dir2/*"

使用aws cli帮助可以找到更多选项和示例

aws s3 cp help

答案 1 :(得分:1)

据我了解,您要确保复制当前目录中存在的文件,但不应复制子目录中的任何文件。我认为您可以使用类似的方法。

aws s3 cp s3://myBucket/dir1/ . --recursive --exclude "*/*"

在这里,我们排除了在“ dir1”之后具有路径分隔符的文件。

答案 2 :(得分:0)

使用aws s3 cp复制文件时,您无法控制递归深度。 aws s3 ls均不支持。

因此,如果您不希望使用--exclude--include选项,建议您:

  1. 使用不带aws s3 ls选项的--recursive命令直接在目录下列出文件,仅从输出中提取文件名,然后将名称保存到文件中。请参阅此post
  2. 然后编写一个简单的脚本来读取文件名并针对每次执行aws s3 cp

或者,您可以使用:

aws s3 cp s3://spaces/dir1/ .  --recursive --exclude "*/*"