BASH'de dosyaları standart çıktıya dökmek için AWS S3 CLI nasıl kullanılır?


93

S3'te bir yol alacak ( ls komutunda belirtildiği gibi ) ve tüm dosya nesnelerinin içeriğini stdout. Esasen cat /path/to/files/*S3 haricinde çoğaltma yapmak istiyorum , örn s3cat '/bucket/path/to/files/*'. Seçeneklere baktığım ilk eğilim, cpkomutu geçici bir dosyaya kullanmak ve sonra cato.

Bunu veya benzerini deneyen oldu mu yoksa zaten bulamadığım bir komut var mı?


Benzer şeyler yapmak için PHP ve Services_Amazon_S3 sınıfını kullanıyorum.
yanlış

Yanıtlar:


153

tüm dosya nesnelerinin içeriğini standart çıktıya döker.

Komutun -hedefine geçerseniz bunu başarabilirsiniz aws s3 cp. Örneğin $ aws s3 cp s3://mybucket/stream.txt -,.

Yapmaya çalıştığın şey böyle bir şey mi? ::

#!/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

5
Ancak stdout için bir yer tutucu olarak '-' seçeneğinin awscli'nin tüm sürümlerinde çalışmadığını unutmayın. Örneğin ubuntu LTS 14.04.2 ile gelen 1.2.9 sürümü bunu desteklemiyor.
antoniob

Aynen öyle. Ubuntu 12.x'teyim ve bash örneğimde çalışmıyor.
Kode Charlie

Bununla ilgili sorun, dosyanın belirli bir sürümünü alamamanızdır.
Eamorr

Ya MacOS High Sierra 10.13.6 çalışmıyor ( aws --version: aws-cli/1.15.40 Python/3.6.5 Darwin/17.7.0 botocore/1.10.40)
MichaelChirico

bu cevabın aynı zamanda dosya içeriğinin bir bütün olarak kopyalanmadan terminalinize aktarılması avantajı vardır. loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout/…
Khoa

47

AWS CLI'nin "-" 'ye kopyalamayı desteklemeyen bir sürümünü kullanıyorsanız / dev / stdout'u da kullanabilirsiniz:

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

Ayrıca, --quietbayrağın çıktınıza aşağıdaki gibi bir özet satırının eklenmesini engellemesini de isteyebilirsiniz :

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


1

S3streamcat kullanmayı deneyebilirsiniz , bzip, gzip ve xz formatlarını da destekler.

İle yükle

sudo pip install s3streamcat

Kullanım:

s3streamcat s3://bucketname/dir/file_path
s3streamcat s3://bucketname/dir/file_path | more
s3streamcat s3://bucketname/dir/file_path | grep something


-3

Bunu BASH kullanarak başarmak isterseniz, AWS Komut Satırı Arayüzü (CLI) gibi harici bir uygulamaya çağrı yapmanız gerekir . CAT eşdeğeri yoktur, bu nedenle dosyayı yerel olarak kopyalamanız ve ardından CAT'e ihtiyacınız olacaktır.

Alternatif olarak, Python, PHP, Java gibi diller için mevcut olan AWS SDK'yı doğrudan çağıran bir uygulamayı kullanabilir / yazabilirsiniz. SDK kullanılarak dosya içerikleri bellekte alınabilir ve ardından stdout'a gönderilebilir.


Yukarıdaki cevap, dosyayı stdout'a çıktılamak için 2. dosya argümanı olarak '-' ile birlikte 'cp' kullanabileceğinizi listeler.
Asfand Qazi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.