2014-02-11 7 views
18

Ich habe einige Dateien, die ich auf s3 kopieren möchte. Anstatt einen Anruf pro Datei zu machen, möchte ich sie alle in einem einzigen Anruf einschließen (um so effizient wie möglich zu sein).wie Dateien im aktuellen Verzeichnis in s3 (und nicht rekursiv) enthalten und kopiert werden

Allerdings scheine ich nur, um es zu arbeiten, wenn ich die --recursive Flag hinzuzufügen, die es bei allen Kindern Verzeichnissen aussehen läßt (alle Dateien, die ich will, sind im aktuellen Verzeichnis nur)

so ist dies der Befehl, den ich jetzt habe, die

aws s3 cp --dryrun . mybucket --recursive --exclude * --include *.jpg

sondern im Idealfall würde ich mag entfernen sie die --recursive arbeitet stoppen sie durchqueren, zB so etwas wie dies (die nicht funktioniert)

aws s3 cp --dryrun . mybucket --exclude * --include *.jpg

(Ich habe das Beispiel vereinfacht, in meinem Skript habe ich mehrere verschiedene umfassen Muster)

Antwort

33

AWS CLI S3 Wildcard-Unterstützung ist ein bisschen primitiv, aber Sie könnten mehrere --exclude Optionen verwenden, um dies zu erreichen. Hinweis: Die Reihenfolge includes und excludes ist wichtig.

aws s3 cp --dryrun . s3://mybucket --recursive --exclude "*" --include "*.jpg" --exclude "*/*" 
1

Ich würde vorschlagen, für ein Programm namens s4cmd gehen, die uns Unix liefert wie Dateisystemoperationen und es erlaubt uns auch die Wildcards https://github.com/bloomreach/s4cmd

4

Versuchen Sie, den Befehl enthalten:

aws s3 cp --dryrun . s3://mybucket --recursive --exclude "*/" 

Ich hoffe, es hilft.

0

Ich habe die vorgeschlagenen Antworten ausprobiert und konnte keine verschachtelten Ordner überspringen. Ich habe einige merkwürdige Ausgaben über die Berechnung von Größe und Objekten mit der Größe 0 gesehen, obwohl ich das Flag "Ausschließen" verwendet habe.

Ich gab schließlich auf --recursive Flag und verwendet Bash, um eine einzelne s3-Upload für jede Datei abgestimmt. Entfernen Sie --dryrun sobald Sie bereit sind zu rollen!

for i in *.{jpg,jpeg}; do aws --dryrun s3 cp ${i} s3://your-bucket/your-folder/${i}; done 
Verwandte Themen