Szybki sposób na wyświetlenie wszystkich plików w zasobniku Amazon S3?
151
Mam wiadro amazon s3, które zawiera dziesiątki tysięcy nazw plików. Jaki jest najłatwiejszy sposób na uzyskanie pliku tekstowego zawierającego wszystkie nazwy plików w zasobniku?
Jak wspomina komentarz jlduponta dotyczący odpowiedzi udzielonej przez vdaubry, boto.s3.bucketlistresultset.BucketListResultSetdotyczy warunku „dziesiątki tysięcy nazw plików”, o którym mowa w pytaniu.
chb
1
Należy pamiętać, że w przypadku zasobników z bardzo dużą liczbą obiektów, powiedzmy milionami lub miliardami, poniższe podejścia do kodowania / tworzenia skryptów nie będą działać dobrze. Zamiast tego należy włączyć S3 Inventory i pobrać raport zapasów.
Jeśli otrzymasz: boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden Upewnij się, że zasady użytkownika dotyczące klucza dostępu / klucza tajnego mają dostęp do S3.
AWS niedawno wydało swoje narzędzia wiersza poleceń. Działa to podobnie jak boto i można je zainstalować za pomocą sudo easy_install awsclilubsudo pip install awscli
s3cmdzwraca nazwy plików posortowane według daty. Czy jest jakiś sposób, żebym mógł zwrócić tylko te pliki, które zostały dodane później 2015-10-23 20:46?
SexyBeast
Zwróć uwagę, że jeśli w nazwach plików są spacje, jest to mała usterka, ale nie mam awk-foo, aby to naprawić
Colin D
36
Uważaj, lista amazon zwraca tylko 1000 plików. Jeśli chcesz iterować po wszystkich plikach, musisz podzielić wyniki za pomocą znaczników:
To działa, ale nie jest tym, czego potrzebuję. Po prostu wymienia wszystkie przedrostki „najwyższego poziomu”. Czy istnieje sposób na pobranie wszystkich obiektów do zasobnika, prefiksów i wszystkiego?
@rinogo Może nie pasuje do twoich potrzeb ... ale działa i to się tutaj liczy. Odpowiada potrzebom innych osób jako poprawna odpowiedź.
Khalil Gharbaoui
Jak powiedziałem, działa - dziękuję! Ale to nie odpowiada na pytanie OP. OP poprosił o sposób na „[wyświetlenie] wszystkich nazw plików w zasobniku”. Zawiera tylko obiekty najwyższego poziomu, a nie wszystkie obiekty.
rinogo
2
Aha, ale nie jest to trudne. Po prostu dodaj „--recursive” do polecenia. Dodam to do mojej odpowiedzi dzięki za wskazanie tego
Khalil Gharbaoui,
12
Dla programistów Scala jest to rekurencyjna funkcja wykonywania pełnego skanowania i mapowania zawartości zasobnika AmazonS3 przy użyciu oficjalnego zestawu AWS SDK dla języka Java
Aby wywołać powyższą map()funkcję curried , po prostu przekaż już skonstruowany (i poprawnie zainicjowany) obiekt AmazonS3Client (patrz oficjalny AWS SDK for Java API Reference ), nazwę zasobnika i nazwę prefiksu na pierwszej liście parametrów. Przekaż także funkcję, f()którą chcesz zastosować, aby odwzorować podsumowanie każdego obiektu na drugiej liście parametrów.
Na przykład
val keyOwnerTuples = map(s3, bucket, prefix)(s =>(s.getKey, s.getOwner))
zwróci pełną listę (key, owner)krotek w tym zasobniku / przedrostku
jeśli aws jest już skonfigurowane, można zamienić linie 2 i 3 nas3 = boto3.resource('s3')
sinapan
Jeśli masz umieszczone zmienne środowiskowe, nie musisz używać zmiennych w sessionmetodzie. AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
Flavio
7
Po zach też poleciłbym boto , ale musiałem trochę zmienić jego kod:
conn = boto.connect_s3('access-key', 'secret'key')
bucket = conn.lookup('bucket-name')
for key in bucket:
print key.name
Dostępny jest jeszcze jeden prosty interfejs API, który pobiera nazwę zasobnika i wyświetla listę obiektów w nim obecnych. ObjectListing objects = s3client.listObjects (bucketName) link javadoc jest podany poniżej, docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/ ...
Rajesh
2
Koduj w Pythonie przy użyciu niesamowitej biblioteki „boto” . Kod zwraca listę plików w zasobniku, a także obsługuje wyjątki dla brakujących zasobników.
import boto
conn = boto.connect_s3(<ACCESS_KEY>,<SECRET_KEY>)try:
bucket = conn.get_bucket(<BUCKET_NAME>, validate =True)except boto.exception.S3ResponseError, e:
do_something()# The bucket does not exist, choose how to deal with it or raise the exceptionreturn[ key.name.encode("utf-8")for key in bucket.list()]
Nie zapomnij zastąpić <PLACE_HOLDERS> swoimi wartościami.
Konfigurowanie poświadczeń AWS za pomocą klienta Minio
Host konfiguracji $ mc dodaj mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
Uwaga: zamień mys3 na alias, który chcesz dla tego konta, a BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 na swój klucz AWS ACCESS-KEY i SECRET-KEY
Dziękujemy za ten fragment kodu, który może zapewnić ograniczoną, natychmiastową pomoc. Właściwe wyjaśnienie znacznie poprawiłoby jego długoterminową wartość, pokazując, dlaczego jest to dobre rozwiązanie problemu, i uczyniłoby go bardziej użytecznym dla przyszłych czytelników z innymi, podobnymi pytaniami. Proszę edytować swoją odpowiedź dodać kilka wyjaśnień, w tym założeń już wykonanych.
Toby Speight
0
Uproszczona i zaktualizowana wersja odpowiedzi Scala autorstwa Paolo:
NAJŁATWIEJSZY sposób na uzyskanie bardzo użytecznego pliku tekstowego polega na pobraniu przeglądarki S3 Browser http://s3browser.com/ i skorzystaniu z generatora adresów internetowych w celu utworzenia listy pełnych ścieżek linków. Jest bardzo poręczny i wymaga około 3 kliknięć.
boto.s3.bucketlistresultset.BucketListResultSet
dotyczy warunku „dziesiątki tysięcy nazw plików”, o którym mowa w pytaniu.Odpowiedzi:
Polecam używanie boto . Następnie jest kilka krótkich linii Pythona :
Zapisz to jako list.py, otwórz terminal, a następnie uruchom:
źródło
AWS CLI
Dokumentacja do aws s3 ls
AWS niedawno wydało swoje narzędzia wiersza poleceń. Działa to podobnie jak boto i można je zainstalować za pomocą
sudo easy_install awscli
lubsudo pip install awscli
Po zainstalowaniu możesz po prostu uruchomić
Który pokaże wszystkie dostępne wiadra
Następnie możesz wysłać zapytanie do konkretnego zasobnika o pliki.
Polecenie :
Wyjście :
Spowoduje to wyświetlenie wszystkich plików.
źródło
--recursive
flagę, aby zobaczyć wszystkie obiekty w określonym katalogus3cmd jest nieoceniony do tego typu rzeczy
$ s3cmd ls -r s3://yourbucket/ | awk '{print $4}' > objects_in_bucket
źródło
s3cmd
zwraca nazwy plików posortowane według daty. Czy jest jakiś sposób, żebym mógł zwrócić tylko te pliki, które zostały dodane później2015-10-23 20:46
?Uważaj, lista amazon zwraca tylko 1000 plików. Jeśli chcesz iterować po wszystkich plikach, musisz podzielić wyniki za pomocą znaczników:
W Ruby za pomocą aws-s3
koniec
Mam nadzieję, że to pomoże, Vincent
źródło
Aktualizacja 15-02-2019:
To polecenie wyświetli listę wszystkich zasobników w AWS S3:
aws s3 ls
To polecenie wyświetli listę wszystkich obiektów najwyższego poziomu w zasobniku AWS S3:
aws s3 ls bucket-name
To polecenie wyświetli listę WSZYSTKICH obiektów w zasobniku AWS S3:
aws s3 ls bucket-name --recursive
To polecenie umieści listę WSZYSTKICH w zasobniku AWS S3 ... wewnątrz pliku tekstowego w bieżącym katalogu:
aws s3 ls bucket-name --recursive | cat >> file-name.txt
źródło
Dla programistów Scala jest to rekurencyjna funkcja wykonywania pełnego skanowania i mapowania zawartości zasobnika AmazonS3 przy użyciu oficjalnego zestawu AWS SDK dla języka Java
Aby wywołać powyższą
map()
funkcję curried , po prostu przekaż już skonstruowany (i poprawnie zainicjowany) obiekt AmazonS3Client (patrz oficjalny AWS SDK for Java API Reference ), nazwę zasobnika i nazwę prefiksu na pierwszej liście parametrów. Przekaż także funkcję,f()
którą chcesz zastosować, aby odwzorować podsumowanie każdego obiektu na drugiej liście parametrów.Na przykład
zwróci pełną listę
(key, owner)
krotek w tym zasobniku / przedrostkulub
tak, jak zwykle podejście Monady w programowaniu funkcjonalnym
źródło
mapped.toList
bez żadnego z poprzednichacc
Można to zrobić na kilka sposobów. Korzystanie z Pythona
Innym sposobem jest użycie do tego celu AWS cli
źródło
s3 = boto3.resource('s3')
session
metodzie.AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
Po zach też poleciłbym boto , ale musiałem trochę zmienić jego kod:
źródło
conn.lookup
zwracaNone
zamiast wyrzucaćS3ResponseError(NoSuchBucket)
błądWięcej informacji można znaleźć tutaj - http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html
źródło
aws s3api list-objects --bucket <bucket-name>
Dla boto3 Pythona po użyciu
aws configure
:źródło
Najpierw upewnij się, jesteś na
instance terminal
i trzebaall access
odS3
wIAM
której używasz. Na przykład użyłem instancji ec2.Następnie skonfiguruj aws
Następnie wypełnijśredniki, np .: -
Teraz zobacz wszystkie zasobniki
Przechowuj nazwy wszystkich zasobników
Zobacz całą strukturę plików w wiadrze
Przechowuj strukturę plików w każdym zasobniku
Mam nadzieję że to pomoże.
źródło
Interfejs wiersza polecenia AWS umożliwia szybkie przeglądanie wszystkich plików zasobnika S3 i pomaga w wykonywaniu innych operacji.
Aby użyć AWS CLI, wykonaj poniższe czynności:
Aby zobaczyć wszystkie pliki zasobnika S3, użyj polecenia
aws s3 ls s3: // nazwa_Twojego_bierka --recursive
Odniesienie do używania AWS cli dla różnych usług AWS: https://docs.aws.amazon.com/cli/latest/reference/
źródło
W Javie możesz uzyskać klucze za pomocą ListObjects (zobacz dokumentację AWS )
źródło
Koduj w Pythonie przy użyciu niesamowitej biblioteki „boto” . Kod zwraca listę plików w zasobniku, a także obsługuje wyjątki dla brakujących zasobników.
Nie zapomnij zastąpić <PLACE_HOLDERS> swoimi wartościami.
źródło
Poniższe polecenie pobierze wszystkie nazwy plików z twojego zasobnika AWS S3 i zapisze do pliku tekstowego w twoim bieżącym katalogu:
źródło
Alternatywnie możesz użyć klienta Minio aka mc. Jego Open Source i kompatybilny z AWS S3. Jest dostępny dla systemów Linux, Windows, Mac, FreeBSD.
Wszystko, co musisz zrobić, to uruchomić polecenie mc ls, aby wyświetlić zawartość.
Uwaga:
Instalowanie klienta Minio dla systemu Linux Pobierz mc dla:
Konfigurowanie poświadczeń AWS za pomocą klienta Minio
Uwaga: zamień mys3 na alias, który chcesz dla tego konta, a BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 na swój klucz AWS ACCESS-KEY i SECRET-KEY
Mam nadzieję, że to pomoże.
Zastrzeżenie: pracuję dla Minio
źródło
Możesz użyć standardowego interfejsu API S3 -
źródło
Możesz wyświetlić listę wszystkich plików w zasobniku aws s3 za pomocą polecenia
i aby zapisać go w pliku, użyj
jeśli chcesz dołączyć swój wynik do pliku, w przeciwnym razie:
jeśli chcesz wyjaśnić, co zostało napisane wcześniej.
Będzie działać zarówno w systemie Windows, jak i Linux.
źródło
W javascript możesz użyć
s3.listObjects (params, function (err, result) {});
aby umieścić wszystkie obiekty w wiadrze. musisz przekazać nazwę zasobnika wewnątrz params (Bucket: name) .
źródło
źródło
źródło
Uproszczona i zaktualizowana wersja odpowiedzi Scala autorstwa Paolo:
Usunięcie elementów ogólnych i użycie ListObjectRequest wygenerowanego przez konstruktory zestawu SDK.
źródło
źródło
W PHP możesz uzyskać pełną listę obiektów AWS-S3 wewnątrz określonego zasobnika, używając następującego wywołania
Możesz przekierować wyjście powyższego kodu do pliku, aby uzyskać listę kluczy.
źródło
Użyj plumbum, aby zawinąć CLI, a otrzymasz jasną składnię:
źródło
spróbuj tego skryptu bash. używa polecenia curl bez konieczności stosowania jakichkolwiek zewnętrznych zależności
źródło
NAJŁATWIEJSZY sposób na uzyskanie bardzo użytecznego pliku tekstowego polega na pobraniu przeglądarki S3 Browser http://s3browser.com/ i skorzystaniu z generatora adresów internetowych w celu utworzenia listy pełnych ścieżek linków. Jest bardzo poręczny i wymaga około 3 kliknięć.
Powodzenia.
źródło