Bagaimana cara menggunakan AWS S3 CLI untuk membuang file ke stdout di BASH?

93

Saya memulai skrip bash yang akan mengambil jalur di S3 (sebagaimana ditentukan ke perintah ls ) dan membuang konten dari semua objek file ke stdout. Pada dasarnya saya ingin mereplikasi cat /path/to/files/*kecuali S3, misalnya s3cat '/bucket/path/to/files/*'. Kecenderungan pertama saya melihat opsi adalah menggunakan cpperintah ke file sementara dan kemudian catitu.

Adakah yang mencoba ini atau serupa atau apakah sudah ada perintah yang tidak saya temukan?

Neil C. Obremski
sumber
Saya menggunakan PHP dan kelas Services_Amazon_S3 untuk melakukan hal serupa.
Disalahpahami

Jawaban:

153

membuang konten dari semua objek file ke stdout.

Anda dapat melakukannya jika Anda meneruskan -untuk tujuan aws s3 cpperintah. Misalnya $ aws s3 cp s3://mybucket/stream.txt -,.

Apa yang Anda coba lakukan adalah seperti ini? ::

#!/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
gemetar
sumber
5
Namun perlu dicatat bahwa '-' sebagai placeholder untuk stdout tidak berfungsi di semua versi awscli. Misalnya, versi 1.2.9, yang hadir dengan ubuntu LTS 14.04.2, tidak mendukungnya.
antoniob
Lakukan itu. Saya menggunakan Ubuntu 12.x, dan tidak berfungsi dalam contoh bash saya.
Kode Charlie
Masalahnya adalah Anda tidak bisa mendapatkan versi file tertentu.
Eamorr
tidak bekerja pada MacOS High Sierra 10.13.6 baik ( aws --version: aws-cli/1.15.40 Python/3.6.5 Darwin/17.7.0 botocore/1.10.40)
MichaelChirico
jawaban ini juga memiliki keuntungan bahwa konten file akan di-streaming ke terminal Anda, dan tidak disalin secara keseluruhan. lihat lebih lanjut di loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout/…
Khoa
47

Jika Anda menggunakan versi AWS CLI yang tidak mendukung penyalinan ke "-" Anda juga dapat menggunakan / dev / stdout:

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

Anda juga mungkin menginginkan --quietbendera untuk mencegah baris ringkasan seperti berikut ini ditambahkan ke keluaran Anda:

unduh: s3: //mybucket/stream.txt ke ../../dev/stdout

Drew
sumber
1

Anda dapat mencoba menggunakan s3streamcat , ini mendukung format bzip, gzip dan xz juga.

Pasang dengan

sudo pip install s3streamcat

Pemakaian:

s3streamcat s3://bucketname/dir/file_path
s3streamcat s3://bucketname/dir/file_path | more
s3streamcat s3://bucketname/dir/file_path | grep something
samarth
sumber
-3

Jika Anda ingin melakukannya menggunakan BASH, Anda harus memanggil aplikasi eksternal seperti AWS Command-Line Interface (CLI). Itu tidak memiliki setara CAT, jadi Anda perlu menyalin file secara lokal dan kemudian CAT.

Sebagai alternatif, Anda dapat menggunakan / menulis aplikasi yang secara langsung memanggil AWS SDK, yang tersedia untuk bahasa seperti Python, PHP, Java. Dengan menggunakan SDK, konten file dapat diambil di dalam memori dan kemudian dikirim ke stdout.

John Rotenstein
sumber
Daftar jawaban di atas bahwa Anda dapat menggunakan 'cp' dengan '-' sebagai argumen file ke-2 untuk membuatnya menampilkan file ke stdout.
Asfand Qazi