จะใช้ AWS S3 CLI เพื่อถ่ายโอนไฟล์ไปยัง stdout ใน BASH ได้อย่างไร


93

ฉันเริ่มสคริปต์ทุบตีซึ่งจะใช้เส้นทางใน S3 (ตามที่ระบุไปยังคำสั่ง lsคำสั่ง) stdoutและการถ่ายโอนเนื้อหาของทั้งหมดของวัตถุไฟล์เพื่อ โดยเฉพาะอย่างยิ่งผมอยากที่จะทำซ้ำcat /path/to/files/*ยกเว้น S3 s3cat '/bucket/path/to/files/*'เช่น ความชอบแรกของฉันมองไปที่ตัวเลือกคือการใช้cpคำสั่งไปยังแฟ้มชั่วคราวแล้วcatว่า

มีใครลองสิ่งนี้หรือคล้ายกันหรือมีคำสั่งที่ฉันไม่พบคำสั่งใดบ้าง


ฉันใช้ PHP และคลาส Services_Amazon_S3 เพื่อทำสิ่งที่คล้ายกัน
เข้าใจผิด

คำตอบ:


153

ถ่ายโอนเนื้อหาของอ็อบเจ็กต์ไฟล์ทั้งหมดไปที่ stdout

คุณสามารถทำได้หากคุณผ่าน-ปลายทางของaws s3 cpคำสั่ง ตัวอย่างเช่น $ aws s3 cp s3://mybucket/stream.txt -.

สิ่งที่คุณกำลังพยายามทำคืออะไรแบบนี้? ::

#!/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
อย่างไรก็ตามโปรดทราบว่า '-' ในฐานะตัวยึดสำหรับ stdout ใช้ไม่ได้ใน awscli ทุกเวอร์ชัน ตัวอย่างเช่นเวอร์ชัน 1.2.9 ซึ่งมาพร้อมกับ ubuntu LTS 14.04.2 ไม่รองรับ
antoniob

เป็นเช่นนั้น ฉันใช้ Ubuntu 12.x และใช้งานไม่ได้ในอินสแตนซ์ของ bash
Kode Charlie

ปัญหานี้คือคุณไม่สามารถรับไฟล์เวอร์ชันเฉพาะได้
Eamorr

ไม่ได้ทำงานกับ MacOS High Sierra 10.13.6 อย่างใดอย่างหนึ่ง ( aws --version: aws-cli/1.15.40 Python/3.6.5 Darwin/17.7.0 botocore/1.10.40)
MichaelChirico

คำตอบนี้ยังมีข้อดีคือเนื้อหาไฟล์จะถูกสตรีมไปยังเทอร์มินัลของคุณและจะไม่คัดลอกโดยรวม ดูเพิ่มเติมได้ที่loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout/…
Khoa

47

หากคุณใช้ AWS CLI เวอร์ชันที่ไม่รองรับการคัดลอกไปยัง "-" คุณยังสามารถใช้ / dev / stdout:

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

คุณอาจต้องการ--quietตั้งค่าสถานะเพื่อป้องกันไม่ให้บรรทัดสรุปดังต่อไปนี้ถูกผนวกเข้ากับผลลัพธ์ของคุณ:

ดาวน์โหลด: s3: //mybucket/stream.txt ถึง ../../dev/stdout


1

คุณสามารถลองใช้s3streamcatซึ่งรองรับรูปแบบ bzip, gzip และ xz เช่นกัน

ติดตั้งด้วย

sudo pip install s3streamcat

การใช้งาน:

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


-3

หากคุณต้องการทำสิ่งนี้ให้สำเร็จโดยใช้ BASH คุณจะต้องโทรออกไปยังแอปภายนอกเช่นAWS Command-Line Interface (CLI) ไม่มีคุณสมบัติเทียบเท่า CAT ดังนั้นคุณจะต้องคัดลอกไฟล์ในเครื่องแล้วเลือก CAT

หรือคุณสามารถใช้ / เขียนแอปที่เรียก AWS SDK โดยตรงซึ่งมีให้บริการสำหรับภาษาต่างๆเช่น Python, PHP, Java ด้วยการใช้ SDK เนื้อหาของไฟล์สามารถเรียกคืนในหน่วยความจำแล้วส่งไปยัง stdout


คำตอบข้างต้นแสดงรายการที่คุณสามารถใช้ 'cp' กับ '-' เป็นอาร์กิวเมนต์ไฟล์ที่ 2 เพื่อทำให้ไฟล์ส่งออกเป็น stdout
Asfand Qazi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.