Rozpoczynam skrypt bash, który weźmie ścieżkę w S3 (zgodnie z poleceniem ls ) i zrzuci zawartość wszystkich obiektów plików stdout
. Zasadniczo chciałbym replikować cat /path/to/files/*
z wyjątkiem S3, np s3cat '/bucket/path/to/files/*'
. Moją pierwszą skłonnością do spojrzenia na opcje jest użycie cp
polecenia do pliku tymczasowego, a potem cat
to.
Czy ktoś próbował tego lub podobnego, czy jest już polecenie, którego nie znajduję, które to robi?
bash
amazon-web-services
amazon-s3
aws-cli
Neil C. Obremski
źródło
źródło
Odpowiedzi:
Możesz to osiągnąć, jeśli przejdziesz
-
jako miejsce doceloweaws s3 cp
dowodzenia. Na przykład$ aws s3 cp s3://mybucket/stream.txt -
.To, co próbujesz zrobić, to coś takiego? ::
#!/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
źródło
aws --version
:aws-cli/1.15.40 Python/3.6.5 Darwin/17.7.0 botocore/1.10.40
)Jeśli używasz wersji AWS CLI, która nie obsługuje kopiowania do "-", możesz także użyć / dev / stdout:
Możesz również chcieć, aby
--quiet
flaga zapobiegała dołączaniu linii podsumowania, takiej jak poniższa, do wyniku:źródło
Możesz spróbować użyć s3streamcat , obsługuje on również formaty bzip, gzip i xz.
Zainstaluj za pomocą
sudo pip install s3streamcat
Stosowanie:
źródło
Ah ha!
https://pypi.python.org/pypi/s3cat/1.0.8
Piszę więcej znaków, aby spełnić wymóg długości.
źródło
Jeśli chcesz to osiągnąć za pomocą BASH, będziesz musiał wywołać zewnętrzną aplikację, taką jak AWS Command-Line Interface (CLI). Nie ma odpowiednika CAT, więc musisz skopiować plik lokalnie, a następnie CAT.
Alternatywnie możesz użyć / napisać aplikację, która bezpośrednio wywołuje pakiet AWS SDK, który jest dostępny dla języków takich jak Python, PHP, Java. Korzystając z zestawu SDK, zawartość pliku można pobrać do pamięci, a następnie wysłać na standardowe wyjście.
źródło