Jak mogę użyć symboli wieloznacznych do `cp` grupy plików z AWS CLI

109

Mam problem z użyciem *w interfejsie wiersza polecenia AWS do wybrania podzbioru plików z określonego zasobnika.

*Wydaje się, że takie dodawanie do ścieżki nie działa

aws s3 cp s3://data/2016-08* .

metry
źródło

Odpowiedzi:

183

Aby pobierać wiele plików z AWS wiadra do bieżącego katalogu, można użyć recursive, excludeoraz includeflagi w ten sposób:

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"

Więcej informacji na temat korzystania z tych filtrów: http://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters

punkrockpolly
źródło
24
Chciałbym zaznaczyć, że --exclude "*"to nie jest literówka. Jeśli go nie dodasz, dołączenie będzie pasowało do wszystkiego . Zgodnie z dokumentacją: Zauważ, że domyślnie wszystkie pliki są uwzględnione. Oznacza to, że podanie tylko filtru --include nie zmieni przenoszonych plików. --include ponownie uwzględni tylko pliki, które zostały wykluczone z filtru --exclude. Jeśli chcesz przesłać tylko pliki z określonym rozszerzeniem, musisz najpierw wykluczyć wszystkie pliki, a następnie ponownie dołączyć pliki z określonym rozszerzeniem.
pyb
7
Pamiętaj o kolejności wykluczania i uwzględniania.
keiki
3
Możesz także użyć syncdla podobnego efektu, który jest domyślnie rekurencyjny:aws s3 sync s3://data/ . --exclude "*" --include "2016-08*"
enharmonic
55

Kolejność parametrów ma znaczenie

Wyklucz i uwzględnij powinny być używane w określonej kolejności, musimy najpierw wykluczyć, a następnie uwzględnić. Odwrotna sytuacja się nie powiedzie.

aws s3 cp s3://data/ . --recursive  --include "2016-08*" --exclude "*" 

To się nie powiedzie, ponieważ w tym przypadku kolejność parametrów ma znaczenie. Uwzględnienie jest wykluczone przez *

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"`

Ten zadziała, ponieważ wykluczyliśmy wszystko, ale później dołączyliśmy konkretny katalog.

samotna gwiazda
źródło
1

OK, muszę powiedzieć, że przykład jest błędny i powinien zostać poprawiony w następujący sposób:

aws s3 cp . s3://data/ --recursive --exclude "*" --include "2006-08*" --exclude "*/*"

Że .musi być zaraz po cp. Ostatnim --excludejest upewnienie się, że nic nie jest pobierane z podkatalogów, które są pobierane przez --recursive(dowiedziałem się, że przez pomyłkę ...)

To zadziała dla każdego, kto boryka się z tym, zanim tu dotrą.

Patrick Palmer
źródło