Cara cepat untuk membuat daftar semua file di Amazon S3 bucket?
151
Saya memiliki ember amazon s3 yang memiliki puluhan ribu nama file di dalamnya. Apa cara termudah untuk mendapatkan file teks yang mencantumkan semua nama file di dalam ember?
Seperti disinggung oleh komentar jldupont tentang jawaban yang diberikan oleh vdaubry, boto.s3.bucketlistresultset.BucketListResultSetalamat kondisi "puluhan ribu nama file" yang disebutkan dalam pertanyaan.
chb
1
Ketahuilah bahwa untuk keranjang dengan jumlah objek yang sangat besar, misalnya jutaan atau milyaran, pendekatan pengkodean / skrip di bawah ini tidak akan berfungsi dengan baik. Anda sebaiknya mengaktifkan S3 Inventory dan mengambil laporan inventaris.
Jika Anda mendapatkan: boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden Pastikan kebijakan pengguna untuk kunci Akses / Rahasia memiliki akses ke S3.
AWS baru-baru ini merilis Alat Baris Perintah mereka. Ini berfungsi seperti boto dan dapat diinstal menggunakan sudo easy_install awscliatausudo pip install awscli
Setelah Anda menginstal, Anda dapat menjalankannya
s3cmdmengembalikan nama file yang diurutkan berdasarkan tanggal. Apakah ada cara saya bisa mengembalikannya dengan mengatakan hanya file-file yang telah ditambahkan setelahnya 2015-10-23 20:46?
SexyBeast
Perhatikan bahwa jika nama file memiliki spasi, ini memiliki kesalahan kecil tapi saya tidak punya awk-foo untuk memperbaikinya
Colin D
36
Hati-hati, daftar amazon hanya mengembalikan 1000 file. Jika Anda ingin mengulang semua file, Anda harus memberi paginasi hasil menggunakan penanda:
Ini berfungsi tetapi sebenarnya bukan yang saya butuhkan. Itu hanya daftar semua awalan "tingkat atas". Apakah ada cara untuk mendapatkan semua objek dalam ember, awalan, dan semua?
@rinogo Mungkin tidak sesuai dengan kebutuhan Anda ... tetapi berfungsi dan itulah yang terpenting di sini. Ini cocok dengan kebutuhan ppl lain sebagai jawaban yang benar.
Khalil Gharbaoui
Seperti yang saya katakan, itu berfungsi - terima kasih! Tapi itu tidak menjawab pertanyaan OP. OP meminta cara untuk "[daftar] semua nama file dalam ember". Ini hanya mencantumkan objek tingkat atas, tidak semua objek.
rinogo
2
Aha tapi itu tidak sulit dilakukan. Cukup tambahkan '--recursive' ke perintah. Saya akan menambahkannya ke jawaban saya, terima kasih untuk menunjukkannya
Khalil Gharbaoui
12
Untuk pengembang Scala, ini dia fungsi rekursif untuk melakukan pemindaian penuh dan memetakan isi ember AmazonS3 menggunakan AWS SDK resmi untuk Java
Untuk menjalankan map()fungsi kari di atas , cukup lewati objek AmazonS3Client yang sudah dibangun (dan diinisialisasi dengan benar) (merujuk ke AWS SDK resmi untuk Referensi API Java ), nama bucket dan nama awalan dalam daftar parameter pertama. Juga lewati fungsi f()yang ingin Anda terapkan untuk memetakan setiap ringkasan objek dalam daftar parameter kedua.
Sebagai contoh
val keyOwnerTuples = map(s3, bucket, prefix)(s =>(s.getKey, s.getOwner))
akan mengembalikan daftar (key, owner)tupel lengkap dalam ember / awalan
jika aws sudah dikonfigurasi, seseorang dapat mengganti jalur 2 dan 3 dengans3 = boto3.resource('s3')
savigasi
Jika Anda menempatkan variabel lingkungan, Anda tidak perlu menggunakan variabel dalam sessionmetode. AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
Flavio
7
Setelah zach saya juga akan merekomendasikan boto , tetapi saya perlu membuat sedikit perbedaan pada kode-nya:
conn = boto.connect_s3('access-key', 'secret'key')
bucket = conn.lookup('bucket-name')
for key in bucket:
print key.name
Pertama make yakin Anda berada di instance terminaldan Anda memiliki all accessdari S3dalam IAMyang Anda gunakan. Sebagai contoh saya menggunakan contoh EC2.
pip3 install awscli
Kemudian Konfigurasikan aws
aws configure
Kemudian, isi laporan: -
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json (or just press enter)
Sekarang, Lihat semua ember
aws s3 ls
Simpan semua nama bucket
aws s3 ls > output.txt
Lihat semua struktur file dalam ember
aws s3 ls bucket-name --recursive
Simpan struktur file di setiap ember
aws s3 ls bucket-name --recursive > file_Structure.txt
Ada satu lagi API sederhana yang tersedia, yang mengambil nama bucket dan mencantumkan objek yang ada di dalamnya. ObjectListing objects = s3client.listObjects (bucketName) tautan javadoc diberikan di bawah ini, docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/…
Rajesh
2
Kode dalam python menggunakan the awesome lib "boto" yang . Kode mengembalikan daftar file dalam ember dan juga menangani pengecualian untuk ember yang hilang.
import boto
conn = boto.connect_s3(<ACCESS_KEY>,<SECRET_KEY>)try:
bucket = conn.get_bucket(<BUCKET_NAME>, validate =True)except boto.exception.S3ResponseError, e:
do_something()# The bucket does not exist, choose how to deal with it or raise the exceptionreturn[ key.name.encode("utf-8")for key in bucket.list()]
Jangan lupa ganti <PLACE_HOLDERS> dengan nilai Anda.
$ mc config host tambahkan mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
Catatan: Silakan ganti mys3 dengan alias Anda ingin untuk akun ini dan, BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 dengan AWS ACCESS-KEY dan RAHASIA-KUNCI
Terima kasih atas cuplikan kode ini, yang mungkin memberikan bantuan terbatas dan segera. Penjelasan yang tepat akan sangat meningkatkan nilai jangka panjangnya dengan menunjukkan mengapa ini adalah solusi yang baik untuk masalah ini, dan akan membuatnya lebih bermanfaat bagi pembaca masa depan dengan pertanyaan lain yang serupa. Harap edit jawaban Anda untuk menambahkan beberapa penjelasan, termasuk asumsi yang Anda buat.
Toby Speight
0
Versi Scala yang disederhanakan dan diperbarui oleh Paolo:
Cara termudah untuk mendapatkan file teks yang sangat bermanfaat adalah dengan mengunduh S3 Browser http://s3browser.com/ dan menggunakan Generator URL Web untuk menghasilkan daftar jalur tautan lengkap. Ini sangat berguna dan melibatkan sekitar 3 klik.
boto.s3.bucketlistresultset.BucketListResultSet
alamat kondisi "puluhan ribu nama file" yang disebutkan dalam pertanyaan.Jawaban:
Saya akan merekomendasikan menggunakan boto . Maka beberapa baris python cepat :
Simpan ini sebagai list.py, buka terminal, dan kemudian jalankan:
sumber
AWS CLI
Dokumentasi untuk aws s3 ls
AWS baru-baru ini merilis Alat Baris Perintah mereka. Ini berfungsi seperti boto dan dapat diinstal menggunakan
sudo easy_install awscli
atausudo pip install awscli
Setelah Anda menginstal, Anda dapat menjalankannya
Yang akan menunjukkan semua ember yang tersedia
Anda kemudian dapat meminta ember khusus untuk file.
Perintah :
Output :
Ini akan menunjukkan kepada Anda semua file Anda.
sumber
--recursive
bendera untuk melihat semua objek di bawah direktori yang ditentukans3cmd sangat berharga untuk hal semacam ini
$ s3cmd ls -r s3://yourbucket/ | awk '{print $4}' > objects_in_bucket
sumber
s3cmd
mengembalikan nama file yang diurutkan berdasarkan tanggal. Apakah ada cara saya bisa mengembalikannya dengan mengatakan hanya file-file yang telah ditambahkan setelahnya2015-10-23 20:46
?Hati-hati, daftar amazon hanya mengembalikan 1000 file. Jika Anda ingin mengulang semua file, Anda harus memberi paginasi hasil menggunakan penanda:
Dalam ruby menggunakan aws-s3
akhir
Semoga ini bisa membantu, vincent
sumber
Pembaruan 15-02-2019:
Perintah ini akan memberi Anda daftar semua ember di AWS S3:
aws s3 ls
Perintah ini akan memberi Anda daftar semua objek tingkat atas di dalam AWS S3 bucket:
aws s3 ls bucket-name
Perintah ini akan memberi Anda daftar SEMUA objek di dalam ember AWS S3:
aws s3 ls bucket-name --recursive
Perintah ini akan menempatkan daftar ALL di dalam kotak AWS S3 ... di dalam file teks di direktori Anda saat ini:
aws s3 ls bucket-name --recursive | cat >> file-name.txt
sumber
Untuk pengembang Scala, ini dia fungsi rekursif untuk melakukan pemindaian penuh dan memetakan isi ember AmazonS3 menggunakan AWS SDK resmi untuk Java
Untuk menjalankan
map()
fungsi kari di atas , cukup lewati objek AmazonS3Client yang sudah dibangun (dan diinisialisasi dengan benar) (merujuk ke AWS SDK resmi untuk Referensi API Java ), nama bucket dan nama awalan dalam daftar parameter pertama. Juga lewati fungsif()
yang ingin Anda terapkan untuk memetakan setiap ringkasan objek dalam daftar parameter kedua.Sebagai contoh
akan mengembalikan daftar
(key, owner)
tupel lengkap dalam ember / awalanatau
seperti yang biasa Anda lakukan dengan Monads dalam Pemrograman Fungsional
sumber
mapped.toList
tanpa yang sebelumnyaacc
Ada beberapa cara untuk melakukannya. Menggunakan Python
Cara lain adalah menggunakan AWS cli untuk itu
sumber
s3 = boto3.resource('s3')
session
metode.AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
Setelah zach saya juga akan merekomendasikan boto , tetapi saya perlu membuat sedikit perbedaan pada kode-nya:
sumber
conn.lookup
kembaliNone
bukannya melemparkanS3ResponseError(NoSuchBucket)
kesalahanUntuk detail lebih lanjut lihat di sini - http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html
sumber
aws s3api list-objects --bucket <bucket-name>
Untuk boto3 Python setelah menggunakan
aws configure
:sumber
Pertama make yakin Anda berada di
instance terminal
dan Anda memilikiall access
dariS3
dalamIAM
yang Anda gunakan. Sebagai contoh saya menggunakan contoh EC2.Kemudian Konfigurasikan aws
Kemudian, isi laporan: -
Sekarang, Lihat semua ember
Simpan semua nama bucket
Lihat semua struktur file dalam ember
Simpan struktur file di setiap ember
Semoga ini membantu.
sumber
AWS CLI dapat memungkinkan Anda melihat semua file bucket S3 dengan cepat dan membantu dalam melakukan operasi lain juga.
Untuk menggunakan AWS CLI ikuti langkah-langkah di bawah ini:
Untuk melihat semua file dari bucket S3 gunakan perintah
aws s3 ls s3: // your_bucket_name --recursive
Referensi untuk menggunakan AWS cli untuk berbagai layanan AWS: https://docs.aws.amazon.com/cli/latest/reference/
sumber
Di Jawa Anda bisa mendapatkan kunci menggunakan ListObjects (lihat dokumentasi AWS )
sumber
Kode dalam python menggunakan the awesome lib "boto" yang . Kode mengembalikan daftar file dalam ember dan juga menangani pengecualian untuk ember yang hilang.
Jangan lupa ganti <PLACE_HOLDERS> dengan nilai Anda.
sumber
Perintah di bawah ini akan mendapatkan semua nama file dari AWS S3 bucket Anda dan menulis ke dalam file teks di direktori Anda saat ini:
sumber
Atau Anda dapat menggunakan Minio Client alias mc. Open Source dan kompatibel dengan AWS S3. Ini tersedia untuk Linux, Windows, Mac, FreeBSD.
Yang harus Anda lakukan adalah menjalankan perintah mc ls untuk membuat daftar konten.
catatan:
Menginstal Minio Client Linux Unduh mc untuk:
Menyiapkan kredensial AWS dengan Minio Client
Catatan: Silakan ganti mys3 dengan alias Anda ingin untuk akun ini dan, BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 dengan AWS ACCESS-KEY dan RAHASIA-KUNCI
Semoga ini bisa membantu.
Penafian: Saya bekerja untuk Minio
sumber
Anda dapat menggunakan api s3 standar -
sumber
Anda dapat membuat daftar semua file, di aws s3 bucket menggunakan perintah
dan untuk menyimpannya dalam file, gunakan
jika Anda ingin menambahkan hasil Anda dalam file sebaliknya:
jika Anda ingin menghapus apa yang ditulis sebelumnya.
Ini akan bekerja di windows dan Linux.
sumber
Dalam javascript Anda bisa menggunakan
s3.listObjects (params, function (err, result) {});
untuk mendapatkan semua benda di dalam ember. Anda harus memasukkan nama bucket di dalam params (Bucket: name) .
sumber
sumber
sumber
Versi Scala yang disederhanakan dan diperbarui oleh Paolo:
Melucuti obat generik dan menggunakan ListObjectRequest yang dihasilkan oleh pembuat SDK.
sumber
sumber
Di PHP Anda bisa mendapatkan daftar lengkap objek AWS-S3 di dalam bucket tertentu menggunakan panggilan berikut
Anda dapat mengarahkan output kode di atas ke file untuk mendapatkan daftar kunci.
sumber
Gunakan timah hitam untuk membungkus cli dan Anda akan memiliki sintaks yang jelas:
sumber
silakan coba skrip bash ini. ia menggunakan perintah curl tanpa perlu ketergantungan eksternal
sumber
Cara termudah untuk mendapatkan file teks yang sangat bermanfaat adalah dengan mengunduh S3 Browser http://s3browser.com/ dan menggunakan Generator URL Web untuk menghasilkan daftar jalur tautan lengkap. Ini sangat berguna dan melibatkan sekitar 3 klik.
Semoga beruntung untukmu.
sumber