Sam*_*ert 10 r amazon-s3 amazon-web-services aws-cli
我正在使用AWS CLI使用如下命令将文件从S3存储桶复制到我的R计算机:
system(
"aws s3 cp s3://my_bucket_location/ ~/my_r_location/ --recursive --exclude '*' --include '*trans*' --region us-east-1"
)
Run Code Online (Sandbox Code Playgroud)
这按预期工作,即它复制my_bucket_location中该位置文件名中包含"trans"的所有文件.
我面临的问题是我有其他文件具有类似的命名约定,我不想在此步骤中导入.作为一个例子,在下面的列表中我只想复制前两个文件,而不是最后两个:
File list
trans_120215.csv
trans_130215.csv
sum_trans_120215.csv
sum_trans_130215.csv
Run Code Online (Sandbox Code Playgroud)
如果我正在使用正则表达式,我可以使它更具体"^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"
)
Run Code Online (Sandbox Code Playgroud)
请注意,我只能使用有关文件的信息,即我想导入带有模式的文件"^trans_\\d+",我不能使用其他不需要的文件在开头包含sum_的事实,因为这只是一个例子可能是其他类似名称的文件,如"check_trans_120215.csv".
我已经考虑了下面的其他替代方案,但希望有一种方法可以调整复制命令以避免沿着这两条路线走下去:
您列出的备选方案是最佳选择,因为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
Run Code Online (Sandbox Code Playgroud)
小智 5
把这个放在这里供其他人找到,因为我只是想弄清楚这一点。这是我想出的:
s3cmd del $(s3cmd ls s3://[BUCKET]/ | grep '.*s3://[BUCKET]/[FILENAME]' | cut -c 41-)
Run Code Online (Sandbox Code Playgroud)
您可以将正则表达式放入 grep 搜索字符串中。例如,我正在搜索要删除的特定文件(因此是 s3cmd del)。我的正则表达式看起来像:'2016-11-04.*s3.*[DN][RS].*'。您可能需要根据您的使用情况调整切口。还应该与s3cmd get.
| 归档时间: |
|
| 查看次数: |
17083 次 |
| 最近记录: |