我有一个带有多个文件夹的存储桶(为了方便理解,我将它们称为文件夹。我知道文件夹在S3中并不存在),所以结构看起来像这样
my_bucket
|
|- 2018-11-06-01
|- file_name1
|- file_name2
|- 2018-11-06-02
|- file_name1
|- file_name2
我正在尝试仅获取最新文件,即最新文件夹中的文件
我可以通过执行aws s3 ls my_bucket/ | tail -1
来获取文件夹名称字符串,但是它将返回PRE 2018-11-06-02/
如何通过处理字符串来获取文件夹名称,以便执行aws s3 cp my_bucket/2018-11-06-02/ <some_path> --recursive
?
答案 0 :(得分:1)
如果您只想将其作为一种解决方案来编写,则可以使用以下方法来解决问题:
aws s3 ls <bucket> \
| sort \
| tail -n 1 \
| awk '{print $2}' \
| xargs -I {} aws s3 cp <bucket>/{} <local_folder> --recursive
您可以将一线阅读成两个部分:
-首先,它通过排序读取ls并获取输出的第二个值(取出存储桶名称的PRE
部分)
-然后,您传递结果(“文件夹”名称),可用于在本地从存储桶中复制字段。
答案 1 :(得分:0)
您可以使用以下方法获取最后修改的文件名(包括完整路径):
aws s3api list-objects-v2 --bucket my-bucket --query 'sort_by(Contents, &LastModified)[-1].Key' --output text
然后,您可以使用Shell工具提取到最后/
的路径,并将其发送到复制命令。
或者,用Python(或其他首选语言)对其进行编码。