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 cp
perintah ke file sementara dan kemudian cat
itu.
Adakah yang mencoba ini atau serupa atau apakah sudah ada perintah yang tidak saya temukan?
bash
amazon-web-services
amazon-s3
aws-cli
Neil C. Obremski
sumber
sumber
Jawaban:
Anda dapat melakukannya jika Anda meneruskan
-
untuk tujuanaws s3 cp
perintah. 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
sumber
aws --version
:aws-cli/1.15.40 Python/3.6.5 Darwin/17.7.0 botocore/1.10.40
)Jika Anda menggunakan versi AWS CLI yang tidak mendukung penyalinan ke "-" Anda juga dapat menggunakan / dev / stdout:
Anda juga mungkin menginginkan
--quiet
bendera untuk mencegah baris ringkasan seperti berikut ini ditambahkan ke keluaran Anda:sumber
Anda dapat mencoba menggunakan s3streamcat , ini mendukung format bzip, gzip dan xz juga.
Pasang dengan
sudo pip install s3streamcat
Pemakaian:
sumber
Ah ha!
https://pypi.python.org/pypi/s3cat/1.0.8
Saya menulis lebih banyak karakter untuk memenuhi persyaratan panjang.
sumber
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.
sumber