2017-07-26 3 views
0

Ich habe ein paar Probleme, die versuchen, übereinstimmende Dateien in einem Verzeichnis in meinem S3-Bucket aufzulisten.Gibt es trotzdem Dateien aus einem S3-Bucket mit ls und Wildcards zu extrahieren? (aws cli)

Ich habe eine ls verwendet, um eine Liste aller meiner Dateien in einem bestimmten Verzeichnis (einschließlich Zeitstempeln und Dateigrößen) zu erstellen, indem Sie dies an eine neue Datei anhängen, zum Beispiel aws s3 --profile mybucket1 ls s3://my-bucket1/directory1/directory2/ >> list.txt.

Dies funktioniert sowohl schnell und wie vorgesehen. Ich habe jedoch auch einige Dateien in Verzeichnis1, die ich auch auflisten möchte, aber nur bestimmte Dateien, die einer bestimmten Zeichenfolge mit Platzhaltern entsprechen.

Die nächste, die ich erreichen muss, ist die Verwendung von cp (mit --exclude und --include) anstelle von ls, weil ls es nicht erlaubt, beispielsweise die Optionen --exclude oder --include zu verwenden aws s3 --profile mybucket1 cp s3://my-bucket1/directory1/ /path/to/local/directory/ --exclude "*" --include "*match-me*" --recursive aber es dauert ewig, um sogar eine einzelne Datei zu kopieren (ich bekomme kein stdout, da ich glaube, dass es das gesamte Verzeichnis nach der passenden Zeichenkette durchsucht, bevor es etwas kopiert). Ich bin auch nicht in der Lage, --recursive zu entfernen, da es mir einen Fehler ohne es gibt, obwohl ich nur Dateien innerhalb von directory1 kopieren möchte.

Meine Vorliebe wäre, ein ls für dieses zu verwenden, da es viel schneller ist und ich dann nicht ein anderes ls auf den heruntergeladenen Dateien machen muss, um das gleiche Format wie die Dateien zu erzeugen, die ich listet und von Verzeichnis2 anfügte.

Auch ich führe alle diese Befehle in einem Bash-Skript aus, falls das irgendeinen Unterschied macht.

Ich hoffe, dass dies sinnvoll ist und wenn jemand irgendwelche mögliche Lösungen dazu hat, würde es sehr geschätzt werden.

+0

check out "aws s3 sync help" – NauT

+2

Wenn Sie Interesse daran haben, einen Ort für diese Art von Fragen zu erstellen, folgen Sie dem Vorschlag für eine [dedizierte Cloud Computing-Site auf StackExchange] (https://area51.stackexchange.com/ Vorschläge/110490/cloud-computing-aws-azure-google-openstack-etc? referrer = Gtut7wQSWPk88jFJz_zqMg2) und stimme einige Beispielfragen ab. –

Antwort

1

Sie bei aws s3api list-objects aussehen sollte

  1. Wenn Ihr Muster zu Beginn des Schlüssels ist und Sie wollen gegen match-me* übereinstimmen, können Sie die --prefix Argumente verwenden:

    aws s3api list-objects --bucket <bucket> --prefix "match-me" 
    

    zurückkehren alle Schlüssel beginnend mit match-me

  2. Wenn in der Mitte des Schlüsselnamen Ihr Muster ist und Sie wollen gegen *match-me* übereinstimmen, können Sie eine Abfrage der Ergebnisse führen können:

    aws s3api list-objects --bucket test-bucket-fh --query "Contents[?contains(Key, 'match-me')]" 
    
+0

Beachten Sie auch, dass List-Objekte nur bis zu 1000 Objekte zurückgibt. – LHWizard

+0

@LHWizard richtig, diese Paginierung benötigt, wenn Sie mehr als 1000 Objekte in Ihrem Eimer haben –

+0

@ FrédéricHenri ich diesen Befehl lief aber es nimmt im Alter keine Ausgabe zu geben. Ich gehe davon aus, dass dies daran liegt, dass der gesamte Bucket mit der Abfrage gescannt wird. Ich werde sehen, wie lange es dauert, um zu laufen, aber ich würde etwas ähnlich dem bevorzugen, was ich in meiner Frage geschrieben habe, da das ein sehr schneller Prozess ist, weil es nicht den ganzen Eimer durchläuft. – fep92

0

Wenn Ihre Notwendigkeit, den Inhalt von Amazon S3 zur Liste nicht dringend ist (zB tun es einmal pro Tag), dann können Sie verwenden Amazon S3 Storage Inventory:

Amazon S3 Inventar stellt eine durch Kommata getrennte Werte (CSV) Flat-File-Ausgabe Ihrer Objekte und ihre zugehörigen Metadaten auf einem täglich oder wöchentlich Basis für einen S3-Bucket oder ein gemeinsames Präfix (dh Objekte mit Namen, die mit einer gemeinsamen Zeichenfolge beginnen).

Es bietet eine tägliche/wöchentliche Datei in Amazon S3, die eine Liste aller Objekte enthält. Zusätzliche charges gelten.

Verwandte Themen