2016-03-25 2 views
2

ich die AWS CLI bin mit Dateien aus einem S3-Bucket meiner RBG kopieren einen Befehl wie unten verwenden:Wie AWS CLI zu verwenden, zu kopieren, nur Dateien in S3 Eimern, die ein bestimmtes Zeichenfolge Muster entsprechen

system(
    "aws s3 cp s3://my_bucket_location/ ~/my_r_location/ --recursive --exclude '*' --include '*trans*' --region us-east-1" 
    ) 

Dies funktioniert wie erwartet, dh es kopiert alle Dateien in my_bucket_location, die "trans" im Dateinamen an dieser Stelle haben.

Das Problem, mit dem ich konfrontiert bin, ist, dass ich andere Dateien mit ähnlichen Namenskonventionen habe, die ich in diesem Schritt nicht importieren möchte. Als Beispiel in der Liste unten Ich möchte nur die ersten beiden Dateien kopieren, nicht die letzten beiden:

File list 
trans_120215.csv 
trans_130215.csv 
sum_trans_120215.csv 
sum_trans_130215.csv 

Wenn ich regex wurde mit Ich konnte es wie "^trans_\\d+" präziser machen nur die ersten beiden zu bringen Dateien, aber dies scheint mit AWS CLI nicht möglich zu sein. Also meine Frage ist, gibt es eine Möglichkeit, komplexere Musterabgleich mit AWS CLI wie unten zu haben?

system(
    "aws s3 cp s3://my_bucket_location/ ~/my_r_location/ --recursive --exclude '*' --include '^trans_\\d+' --region us-east-1" 
    ) 

Bitte beachten Sie, dass ich nur Informationen über die betreffende Datei verwenden kann, das heißt, dass ich mit dem Muster eine Datei importieren möge "^trans_\\d+", ich nicht die Tatsache, dass die anderen unerwünschten Dateien zu Beginn sum_ enthalten kann , weil dies nur ein Beispiel ist, könnte es andere Dateien mit ähnlichen Namen wie "check_trans_120215.csv" geben.

Ich habe wie unter anderen Alternativen in Betracht gezogen, aber gehofft, es ist ein Weg, um den Kopierbefehl anzupassen eine dieser Strecken zu vermeiden hinunter:

  • alle Artikel im Eimer Listing> mit regex in R geben Sie die Dateien, die ich will> nur die Dateien importieren
  • den Kopierbefehl zu halten, wie es ist> löschen unerwünschte Dateien auf der R-Maschine nach der Kopie

Antwort

3

die Alternativen, die Sie aufgeführt haben die besten Möglichkeiten sind, weil S3 CLI nicht Unterstützung regex.

Use of Exclude and Include Filters:

Derzeit gibt es keine Unterstützung für die Verwendung von UNIX-Stil Platzhalter in einen Pfad Argument des Befehls. Die meisten Befehle haben jedoch - exclude "" und "include" Parameter, die das gewünschte Ergebnis erreichen können. Diese Parameter führen eine Musterübereinstimmung mit entweder aus oder schließen eine bestimmte Datei oder ein bestimmtes Objekt ein. Die folgenden Muster Symbole werden unterstützt.

*: Matches everything 
?: Matches any single character 
[sequence]: Matches any character in sequence 
[!sequence]: Matches any character not in sequence 
+1

ah ok, das ist eine Schande. Danke für die Information –

0

Putting dies hier für andere zu finden, da ich das hatte, um herauszufinden, gerade. Hier ist, was ich kam mit:

s3cmd del $(s3cmd ls s3://[BUCKET]/ | grep '.*s3://[BUCKET]/[FILENAME]' | cut -c 41-) 

Sie die Regex in der grep Suchbegriff setzen können. Zum Beispiel suchte ich nach bestimmten zu löschenden Dateien (daher die s3cmd del). Meine Regex sah so aus: '2016-11-04.*s3.*[DN][RS].*'. Möglicherweise müssen Sie den Schnitt für Ihre Verwendung anpassen. Sollte auch mit s3cmd get funktionieren.

Verwandte Themen