我只想从 S3 复制今天起包含 100 个文件的某个存储桶中的文件。我尝试了以下操作:$ aws s3 ls s3://cve-etherwan/ --recursive --region=us-west-2 | grep 2018-11-06 | awk '{system("aws s3 sync s3://cve-etherwan/$4 . --region=us-west-2") }'
但它不太有效,我还获取了其他日期的文件。我该如何正确地做到这一点?
答案1
那是因为在第二个aws s3
你使用sync
.尝试cp
一下。您也可以将“grep”和“awk”合并在一起。
$ aws s3 ls s3://cve-etherwan/ --recursive | awk '/^2018-11-06/{system("aws s3 cp s3://cve-etherwan/$4 .") }'
答案2
这对我有用
- 添加了时间限制,这里我选择19/12/12 8:00到8:30
- 稍微修改了 awk 部分,删除了拼写错误
- 而不是打电话
system
n来自 awk 的时间,创建一个文本输出并通过 bash 进行管道传输
是的,在 bash 中使用管道时要小心:-)
aws s3 ls --recursive s3://cve-etherwan/
| awk '/^2019-12-12 08:[0-3]/{
print "aws s3 cp s3://cve-etherwan/"$4" ."}'
| bash
答案3
MLu 的答案对我有用,但我不得不逃避 Amazon Linux 2 上的 4 美元。
aws s3 ls s3://my-files --recursive --region=eu-west-1 |
awk '/^2021-01/{system("aws s3 cp s3://my-files/" $4 " .")}'
和
"aws s3 cp s3://my-files/$4 ."
取而代之"aws s3 cp s3://my-files/" $4 " ."
awk
默认情况下将连接字符串。