Bash 如何提取.tar.xz并将其直接流式传输到s3 bucket,而无需本地保存

Bash 如何提取.tar.xz并将其直接流式传输到s3 bucket,而无需本地保存,bash,amazon-web-services,amazon-s3,aws-cli,Bash,Amazon Web Services,Amazon S3,Aws Cli,我有一个非常大的(~300GB).tar.gz文件。提取后(使用tar-xzvf file.tar.gz),它会生成许多.json.xz文件。我希望提取原始json文件并将其上传到s3,而不在本地保存(因为我没有空间这样做)。我知道我可以启动一个ec2实例,用足够的空间来提取和上传文件,但我想知道如何(或者是否)直接完成 我已经尝试过各种版本的tar-xzvf file.tar.gz | aws s3 cp-s3://bucket,但这仍然是本地提取的;此外,它似乎会生成json.xz文件,而不

我有一个非常大的(~300GB).tar.gz文件。提取后(使用tar-xzvf file.tar.gz),它会生成许多.json.xz文件。我希望提取原始json文件并将其上传到s3,而不在本地保存(因为我没有空间这样做)。我知道我可以启动一个ec2实例,用足够的空间来提取和上传文件,但我想知道如何(或者是否)直接完成

我已经尝试过各种版本的tar-xzvf file.tar.gz | aws s3 cp-s3://bucket,但这仍然是本地提取的;此外,它似乎会生成json.xz文件,而不是原始json。我已经尝试过调整这个响应,从中提取并上传一个文件,但还没有成功


我正在使用Ubuntu16.04,对linux来说是个新手,所以非常感谢您的帮助

我想我会这样做的。可能有更优雅/高效的解决方案:

tar --list -zf file.tar.gz | while read -r item
do
    tar -xzvfO file.tar.gz $item | aws s3 cp - s3://the-bucket/$item
done
因此,您要迭代归档文件中的文件,将它们逐个提取到stdout,然后直接将它们上载到S3,而无需先访问磁盘


这假设您的
tar
文件中的项目名称没有任何有趣的地方(没有空格等)。

谢谢。我唯一需要的改变是-f标志必须排在最后;这最终对我来说不起作用,但将大文件上传到s3似乎是个问题,而不是您的解决方案。