Bagaimana saya bisa menggunakan wildcard untuk `cp` sekelompok file dengan AWS CLI

110

Saya mengalami masalah saat menggunakan *di AWS CLI untuk memilih subset file dari keranjang tertentu.

Menambahkan *ke jalur seperti ini sepertinya tidak berhasil

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

meterk
sumber

Jawaban:

184

Untuk mendownload beberapa file dari ember aws ke direktori Anda saat ini, Anda dapat menggunakan recursive, excludedan includebendera seperti ini:

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

Untuk info lebih lanjut tentang cara menggunakan filter ini: http://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters

punkrockpolly
sumber
24
Saya ingin menunjukkan bahwa --exclude "*"ini bukanlah kesalahan ketik. Jika Anda tidak menambahkannya, penyertaan akan cocok dengan apa pun . Sesuai dokumentasi: Perhatikan bahwa, secara default, semua file disertakan. Ini berarti bahwa hanya menyediakan filter --include tidak akan mengubah file apa yang ditransfer. --include hanya akan memasukkan kembali file yang telah dikecualikan dari filter --exclude. Jika Anda hanya ingin mengupload file dengan ekstensi tertentu, Anda harus mengecualikan semua file terlebih dahulu, lalu memasukkan kembali file dengan ekstensi tertentu.
pyb
7
Waspadai urutan kecualikan dan sertakan juga.
keiki
3
Anda juga dapat menggunakan syncuntuk efek serupa, yang rekursif secara default:aws s3 sync s3://data/ . --exclude "*" --include "2016-08*"
enharmonic
55

Urutan Parameter Penting

Kecualikan dan penyertaan harus digunakan dalam urutan tertentu, Kami harus mengecualikan terlebih dahulu, lalu menyertakan. Kebalikannya tidak akan berhasil.

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

Ini akan gagal karena urutan parameter penting dalam kasus ini. Termasuk dikecualikan oleh *

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

Yang ini akan berfungsi karena kami mengecualikan semuanya tetapi kemudian kami telah memasukkan direktori tertentu.

loneStar
sumber
1

Oke saya harus katakan contoh salah dan harus diperbaiki sebagai berikut:

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

The .kebutuhan untuk menjadi benar setelah cp. Yang terakhir --excludeadalah memastikan bahwa tidak ada yang diambil dari subdirektori mana pun yang diambil oleh --recursive(mengetahui bahwa salah satunya karena kesalahan ...)

Ini akan berhasil bagi siapa pun yang berjuang dengan ini pada saat mereka tiba di sini.

Patrick Palmer
sumber