How to use AWS S3 CLI to dump files to stdout in BASH?

60,942

Solution 1

dump the contents of all of the file objects to stdout.

You can accomplish this if you pass - for destination of aws s3 cp command. For example, $ aws s3 cp s3://mybucket/stream.txt -.

What you're trying to do is something like this? ::

#!/bin/bash

BUCKET=YOUR-BUCKET-NAME
for key in `aws s3api list-objects --bucket $BUCKET --prefix bucket/path/to/files/ | jq -r '.Contents[].Key'`
do
  echo $key
  aws s3 cp s3://$BUCKET/$key - | md5sum
done

Solution 2

If you are using a version of the AWS CLI that doesn't support copying to "-" you can also use /dev/stdout:

$ aws s3 cp --quiet s3://mybucket/stream.txt /dev/stdout

You also may want the --quiet flag to prevent a summary line like the following from being appended to your output:

download: s3://mybucket/stream.txt to ../../dev/stdout

Solution 3

You can try using s3streamcat, it supports bzip, gzip and xz formats as well.

Install with

sudo pip install s3streamcat

Usage:

s3streamcat s3://bucketname/dir/file_path
s3streamcat s3://bucketname/dir/file_path | more
s3streamcat s3://bucketname/dir/file_path | grep something
Share:
60,942

Related videos on Youtube

Neil C. Obremski
Author by

Neil C. Obremski

Ribbit

Updated on December 01, 2020

Comments

  • Neil C. Obremski
    Neil C. Obremski over 3 years

    I'm starting a bash script which will take a path in S3 (as specified to the ls command) and dump the contents of all of the file objects to stdout. Essentially I'd like to replicate cat /path/to/files/* except for S3, e.g. s3cat '/bucket/path/to/files/*'. My first inclination looking at the options is to use the cp command to a temporary file and then cat that.

    Has anyone tried this or similar or is there already a command I'm not finding which does it?

    • Misunderstood
      Misunderstood about 9 years
      I use PHP and the Services_Amazon_S3 class to do similar things.
  • Antonio Barbuzzi
    Antonio Barbuzzi almost 9 years
    Note however that '-' as a placeholder for stdout does not work in all the versions of awscli. For example, the version 1.2.9, which comes with ubuntu LTS 14.04.2, doesn't support it.
  • Kode Charlie
    Kode Charlie over 8 years
    Ditto that. I'm on Ubuntu 12.x, and it does not work in my instance of bash.
  • Mahendar Patel
    Mahendar Patel over 8 years
    The above answer lists that you can use 'cp' with '-' as the 2nd file argument to make it output the file to stdout.
  • Eamorr
    Eamorr almost 8 years
    Problem with this is that you can't get a specific version of the file.
  • MichaelChirico
    MichaelChirico over 5 years
    not working on macOS High Sierra 10.13.6 either (aws --version: aws-cli/1.15.40 Python/3.6.5 Darwin/17.7.0 botocore/1.10.40)
  • Khoa
    Khoa over 5 years
    this answer has also the advantage that the file content will be stream to your terminal, and not copied as a whole. see more at loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout‌​/…