繁体   English   中英

如何使用 AWS CLI 仅复制 S3 存储桶中与给定字符串模式匹配的文件

[英]How to use AWS CLI to only copy files in S3 bucket that match a given string pattern

我正在使用 AWS CLI 使用如下命令将文件从 S3 存储桶复制到我的 R 机器:

  system(
    "aws s3 cp s3://my_bucket_location/ ~/my_r_location/ --recursive --exclude '*' --include '*trans*' --region us-east-1"
    )

这按预期工作,即它复制 my_bucket_location 中在该位置的文件名中具有“trans”的所有文件。

我面临的问题是我不想在此步骤中导入具有类似命名约定的其他文件。 例如,在下面的列表中我只想复制前两个文件,而不是后两个:

File list
trans_120215.csv
trans_130215.csv
sum_trans_120215.csv
sum_trans_130215.csv

如果我使用的是正则表达式,我可以使其更具体,例如"^trans_\\d+"以仅引入前两个文件,但这似乎无法使用 AWS CLI。 所以我的问题是有没有一种方法可以像下面这样使用 AWS CLI 进行更复杂的模式匹配?

  system(
    "aws s3 cp s3://my_bucket_location/ ~/my_r_location/ --recursive --exclude '*' --include '^trans_\\d+' --region us-east-1"
    )

请注意,我只能使用有关该文件的信息,即我想导入一个带有模式"^trans_\\d+"的文件,我不能使用其他不需要的文件在开头包含 sum_ 的事实,因为这只是一个示例,所以可能还有其他名称相似的文件,例如“check_trans_120215.csv”。

我已经考虑过如下其他替代方案,但希望有一种方法可以调整复制命令以避免沿着这些路线走下去:

  • 列出存储桶中的所有项目 > 在 R 中使用正则表达式来指定我想要的文件 > 仅导入那些文件
  • 保持复制命令不变>复制后删除R机器上不需要的文件

您列出的备选方案是最佳选项,因为S3 CLI不支持regex

使用排除和包含过滤器

目前,不支持在命令的路径参数中使用UNIX样式通配符。 但是,大多数命令都有--exclude“”和--include“”参数,可以实现所需的结果。 这些参数执行模式匹配以排除或包含特定文件或对象。 支持以下模式符号。

*: Matches everything
?: Matches any single character
[sequence]: Matches any character in sequence
[!sequence]: Matches any character not in sequence

把它放在这里让其他人找到,因为我只需要弄清楚这一点。 这是我想出的:

s3cmd del $(s3cmd ls s3://[BUCKET]/ | grep '.*s3://[BUCKET]/[FILENAME]' | cut -c 41-)

您可以将正则表达式放在grep搜索字符串中。 例如,我正在搜索要删除的特定文件(因此s3cmd del)。 我的正则表达式看起来像: '2016-11-04.*s3.*[DN][RS].*' 您可能需要调整剪裁以供您使用。 还应该使用s3cmd get

这里是删除相同的解决方案,你可以用cp替换rm ,你可以使用aws cli: https ://aws.amazon.com/cli/和一些unix命令来实现。

这个aws cli命令应该工作:

aws s3 rm s3://<your_bucket_name> --exclude "*" --include "<your_regex>"

如果你想包含子文件夹,你应该添加标志--recursive

或使用unix命令:

aws s3 ls s3://<your_bucket_name>/ | awk '{print $4}' | xargs -I%  <your_os_shell>   -c 'aws s3 rm s3:// <your_bucket_name>/% $1'

说明:

  1. 列出存储桶上的所有文件--pipe - >
  2. 获取第4个参数(它的文件名) --pipe - > //你可以用linux命令替换它以匹配你的模式
  3. 用aws cli运行删除脚本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM