我找到了从 stdin 上传到 S3 的选项:
cat test.txt | aws s3 cp - s3://mybucket/test.text
但是我有一个通过 curl 传入的 tgz 存档,其中包含多个文件。我想将内容写入 S3 存储桶。这就是我想要做的:
curl http://rapidsai-data.s3-website.us-east-2.amazonaws.com/notebook-mortgage-data/mortgage_2000.tgz | tar xvz - | aws s3 sync - s3://mybucket/
但是 sync 不支持流输入,而 cp 不支持多个文件。有什么建议吗?
答案1
我认为 CLI 在设计上不支持从 stdin 输入多个文件。
Sync 明确处理一个本地目录和一个 S3 存储桶 - 文档中没有提及 stdin 支持。(https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html)
复制适用于单个本地文件和单个远程 S3 键,并且正如您所描述的那样,将接受来自 stdin 的输入。(https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html)
据我所知,您可以本地提取文件并使用s3 sync
(或提取文件并运行脚本来迭代每个文件并s3 cp
在每个文件上使用)。
如果空间紧张,您可以考虑通过 stdin 将 TGZ 上传到 S3 中的某个临时位置,然后使用单独的进程下载、提取和上传单个文件 - 但据我所知,无法避免提取文件然后上传的需求。