Bha*_*esh 3 amazon-s3 amazon-web-services aws-cli
我正在尝试使用aws-cli将数据从s3复制到具有前缀的本地。
但是我在使用不同的正则表达式时遇到了错误。
aws s3 cp s3://my-bucket-name/RAW_TIMESTAMP_0506* . --profile prod
Run Code Online (Sandbox Code Playgroud)
错误:
找不到匹配项:s3:// my-bucket-name / RAW_TIMESTAMP_0506 *
小智 10
上面的答案无法正常工作......例如,我在一个目录中按日期有数千个文件,我希望只检索需要的文件..所以我尝试了每个文档的正确版本:
aws s3 cp s3://mybucket/sub /my/local/ --recursive --exclude "*" --include "20170906*.png"
它没有下载前缀文件,而是开始下载所有内容
所以我尝试了上面的示例:
aws s3 cp s3://mybucket/sub/ . /my/local --recursive --include "20170906*"
并且它还下载了所有内容......似乎这是 aws cli 的一个持续问题,他们无意修复它......以下是我在谷歌搜索时发现的一些解决方法,但它们不太理想。
https://github.com/aws/aws-cli/issues/1454
aws s3 cp s3://my-bucket/ <local directory path> --recursive --exclude "*" --include "<prefix>*"
Run Code Online (Sandbox Code Playgroud)
这将仅复制具有给定前缀的文件
如果您不喜欢静音控制台,您可以aws ls通过管道传输awk并返回aws cp.
例子
# url must be the entire prefix that includes folders.
# Ex.: url='s3://my-bucket-name/folderA/folderB',
# not url='s3://my-bucket-name'
url='s3://my-bucket-name/folderA/folderB'
prefix='RAW_TIMESTAMP_0506'
aws s3 ls "$url/$prefix" | awk '{system("aws s3 cp '"$url"'/"$4 " .")}'
Run Code Online (Sandbox Code Playgroud)
解释
ls部分非常简单。我使用变量来简化和缩短命令。始终将 shell 变量括在双引号中以防止灾难。awk {print $4}只会从输出中提取文件名ls(而不是 S3 密钥!这就是为什么 url 必须是包含文件夹的整个前缀。)awk {system("echo " $4")}会做同样的事情,但它是通过调用另一个命令来完成的。注意:我没有使用子shell ,因为这会在开始之前$(...)运行整个ls | awk部分。那会很慢,而且很长一段时间内不会打印任何东西。cpawk '{system("echo aws s3 cp "$4 " .")}'会打印与我们想要的非常接近的命令。注意间距。如果您尝试运行它,您会发现有些事情不太正确。这会产生类似的命令aws s3 cp RAW_TIMESTAMP_05060402_whatever.log .awk '{system("echo aws s3 cp '$url'/"$4 " .")}'这就是我们正在寻找的。这会将路径添加到文件名中。仔细看看报价。请记住,我们将awk参数用单引号括起来,因此如果我们想在该参数中使用 shell 变量,则必须关闭并重新打开引号。awk '{system("aws s3 cp '"$url"'/"$4 " .")}'是最终版本。我们只需删除echo以实际执行由awk. 当然,我还$url用双引号将该变量引起来,因为这是一个很好的做法。该aws s3 cp命令将不接受通配符作为文件名(键)的一部分。相反,必须使用--include和--exclude参数定义文件名。
来自:使用排除和包含过滤器
当前,在命令的路径参数中不支持使用UNIX样式通配符。但是,大多数命令都具有可以实现所需结果的
--exclude "<value>"和--include "<value>"参数。这些参数执行模式匹配以排除或包括特定文件或对象。支持以下模式符号。
因此,您将使用类似:
aws s3 cp s3://my-bucket-name/ . --include "RAW_TIMESTAMP_0506*"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11298 次 |
| 最近记录: |