BASH में स्टडआउट करने के लिए फ़ाइलों को डंप करने के लिए AWS S3 CLI का उपयोग कैसे करें?


93

मैं एक बैश स्क्रिप्ट शुरू कर रहा हूं जो S3 में एक रास्ता लेगा (जैसा कि ls कमांड को निर्दिष्ट किया गया है ) और सभी फ़ाइल ऑब्जेक्ट्स की सामग्री को डंप करने के लिए stdout। अनिवार्य रूप से मैं cat /path/to/files/*S3 को छोड़कर दोहराना चाहूंगा , जैसे s3cat '/bucket/path/to/files/*'। मेरा पहला झुकाव विकल्पों को देखने के cpलिए एक अस्थायी फ़ाइल में कमांड का उपयोग करना है और फिर catवह है।

क्या किसी ने ऐसा करने की कोशिश की है या पहले से ही एक आदेश है जो मुझे नहीं मिल रहा है जो यह करता है?


मैं समान चीजों को करने के लिए PHP और Services_Amazon_S3 वर्ग का उपयोग करता हूं।
Misunderstood

जवाबों:


152

फ़ाइल ऑब्जेक्ट की सभी सामग्री को स्टडआउट करने के लिए डंप करें।

यदि आप कमांड के -गंतव्य के लिए पास करते हैं तो आप इसे पूरा कर सकते हैं 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 के लिए एक प्लेसहोल्डर के रूप में '-' akscli के सभी संस्करणों में काम नहीं करता है। उदाहरण के लिए, संस्करण 1.2.9, जो ubuntu LTS 14.04.2 के साथ आता है, इसका समर्थन नहीं करता है।
एंटोनियोब

डिट्टो कि। मैं उबंटू 12.x पर हूं, और यह मेरे उदाहरण में काम नहीं करता है।
कोडे चार्ली

इसके साथ समस्या यह है कि आपको फ़ाइल का एक विशिष्ट संस्करण नहीं मिल सकता है।
Eamorr

MacOS उच्च सिएरा 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/...
खोआ

47

यदि आप AWS CLI के एक संस्करण का उपयोग कर रहे हैं जो "-" का उपयोग करने के लिए प्रतिलिपि बनाने का समर्थन नहीं करता है, तो आप / dev / std का उपयोग भी कर सकते हैं:

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

आप यह भी चाह सकते हैं कि --quietध्वज को अपने आउटपुट में निम्नलिखित से सारांश रेखा को रोकने के लिए पसंद किया जाए:

डाउनलोड: s3: //mybucket/stream.txt to ../../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 कमांड-लाइन इंटरफ़ेस (CLL) जैसे बाहरी ऐप पर कॉल-आउट करना होगा । इसके पास कैट समकक्ष नहीं है, इसलिए आपको फ़ाइल को स्थानीय रूप से कॉपी करना होगा और फिर कैट करना होगा।

वैकल्पिक रूप से, आप एक ऐप का उपयोग / लिख सकते हैं जो सीधे AWS SDK को कॉल करता है, जो कि पायथन, पीएचपी, जावा जैसी भाषाओं के लिए उपलब्ध है। एसडीके का उपयोग करके, फ़ाइल सामग्री को मेमोरी में पुनः प्राप्त किया जा सकता है और फिर स्टडआउट पर भेजा जा सकता है।


उपर्युक्त उत्तर सूचीबद्ध करता है कि आप 'cp' का उपयोग '-' के साथ कर सकते हैं क्योंकि यह फ़ाइल को स्टडआउट करने के लिए आउटपुट करने के लिए 2 डी फ़ाइल तर्क के रूप में है।
असफंद काजी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.