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?
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?
Jawaban:
Saya akan merekomendasikan menggunakan boto . Maka beberapa baris python cepat :
from boto.s3.connection import S3Connection
conn = S3Connection('access-key','secret-access-key')
bucket = conn.get_bucket('bucket')
for key in bucket.list():
print key.name.encode('utf-8')
Simpan ini sebagai list.py, buka terminal, dan kemudian jalankan:
$ python list.py > results.txt
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
aws s3 ls
Yang akan menunjukkan semua ember yang tersedia
CreationTime Bucket
------------ ------
2013-07-11 17:08:50 mybucket
2013-07-24 14:55:44 mybucket2
Anda kemudian dapat meminta ember khusus untuk file.
Perintah :
aws s3 ls s3://mybucket
Output :
Bucket: mybucket
Prefix:
LastWriteTime Length Name
------------- ------ ----
PRE somePrefix/
2013-07-25 17:06:27 88 test.txt
Ini akan menunjukkan kepada Anda semua file Anda.
--recursive
bendera untuk melihat semua objek di bawah direktori yang ditentukan
s3cmd sangat berharga untuk hal semacam ini
$ s3cmd ls -r s3://yourbucket/ | awk '{print $4}' > objects_in_bucket
s3cmd
mengembalikan 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
?
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
bucket_name = 'yourBucket'
marker = ""
AWS::S3::Base.establish_connection!(
:access_key_id => 'your_access_key_id',
:secret_access_key => 'your_secret_access_key'
)
loop do
objects = Bucket.objects(bucket_name, :marker=>marker, :max_keys=>1000)
break if objects.size == 0
marker = objects.last.key
objects.each do |obj|
puts "#{obj.key}"
end
end
akhir
Semoga ini bisa membantu, vincent
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
Untuk pengembang Scala, ini dia fungsi rekursif untuk melakukan pemindaian penuh dan memetakan isi ember AmazonS3 menggunakan AWS SDK resmi untuk Java
import com.amazonaws.services.s3.AmazonS3Client
import com.amazonaws.services.s3.model.{S3ObjectSummary, ObjectListing, GetObjectRequest}
import scala.collection.JavaConversions.{collectionAsScalaIterable => asScala}
def map[T](s3: AmazonS3Client, bucket: String, prefix: String)(f: (S3ObjectSummary) => T) = {
def scan(acc:List[T], listing:ObjectListing): List[T] = {
val summaries = asScala[S3ObjectSummary](listing.getObjectSummaries())
val mapped = (for (summary <- summaries) yield f(summary)).toList
if (!listing.isTruncated) mapped.toList
else scan(acc ::: mapped, s3.listNextBatchOfObjects(listing))
}
scan(List(), s3.listObjects(bucket, prefix))
}
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
atau
map(s3, "bucket", "prefix")(s => println(s))
seperti yang biasa Anda lakukan dengan Monads dalam Pemrograman Fungsional
mapped.toList
tanpa yang sebelumnyaacc
Ada beberapa cara untuk melakukannya. Menggunakan Python
import boto3
sesssion = boto3.Session(aws_access_key_id, aws_secret_access_key)
s3 = sesssion.resource('s3')
bucketName = 'testbucket133'
bucket = s3.Bucket(bucketName)
for obj in bucket.objects.all():
print(obj.key)
Cara lain adalah menggunakan AWS cli untuk itu
aws s3 ls s3://{bucketname}
example : aws s3 ls s3://testbucket133
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:
conn = boto.connect_s3('access-key', 'secret'key')
bucket = conn.lookup('bucket-name')
for key in bucket:
print key.name
conn.lookup
kembali None
bukannya melemparkan S3ResponseError(NoSuchBucket)
kesalahan
aws s3api list-objects --bucket bucket-name
Untuk detail lebih lanjut lihat di sini - http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html
aws s3api list-objects --bucket <bucket-name>
Pertama make yakin Anda berada di instance terminal
dan Anda memiliki all access
dari S3
dalam IAM
yang 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
Semoga ini membantu.
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/
Di Jawa Anda bisa mendapatkan kunci menggunakan ListObjects (lihat dokumentasi AWS )
FileWriter fileWriter;
BufferedWriter bufferedWriter;
// [...]
AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName(bucketName)
.withPrefix("myprefix");
ObjectListing objectListing;
do {
objectListing = s3client.listObjects(listObjectsRequest);
for (S3ObjectSummary objectSummary :
objectListing.getObjectSummaries()) {
// write to file with e.g. a bufferedWriter
bufferedWriter.write(objectSummary.getKey());
}
listObjectsRequest.setMarker(objectListing.getNextMarker());
} while (objectListing.isTruncated());
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 exception
return [ key.name.encode( "utf-8" ) for key in bucket.list() ]
Jangan lupa ganti <PLACE_HOLDERS> dengan nilai Anda.
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:
aws s3 ls s3://Bucketdirectory/Subdirectory/ | cat >> FileNames.txt
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.
$ mc ls s3 / kline / [2016-04-30 13:20:47 IST] 1.1MiB 1.jpg [2016-04-30 16:03:55 IST] 7.5KiB docker.png [2016-04-30 15:16:17 IST] 50KiB pi.png [2016-05-10 14:34:39 IST] 365KiB upton.pdf
catatan:
Menginstal Minio Client Linux Unduh mc untuk:
$ chmod 755 mc $ ./mc --help
Menyiapkan kredensial AWS dengan Minio Client
$ 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
Semoga ini bisa membantu.
Penafian: Saya bekerja untuk Minio
Anda dapat membuat daftar semua file, di aws s3 bucket menggunakan perintah
aws s3 ls path/to/file
dan untuk menyimpannya dalam file, gunakan
aws s3 ls path/to/file >> save_result.txt
jika Anda ingin menambahkan hasil Anda dalam file sebaliknya:
aws s3 ls path/to/file > save_result.txt
jika Anda ingin menghapus apa yang ditulis sebelumnya.
Ini akan bekerja di windows dan Linux.
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) .
function showUploads(){
if (!class_exists('S3')) require_once 'S3.php';
// AWS access info
if (!defined('awsAccessKey')) define('awsAccessKey', '234567665464tg');
if (!defined('awsSecretKey')) define('awsSecretKey', 'dfshgfhfghdgfhrt463457');
$bucketName = 'my_bucket1234';
$s3 = new S3(awsAccessKey, awsSecretKey);
$contents = $s3->getBucket($bucketName);
echo "<hr/>List of Files in bucket : {$bucketName} <hr/>";
$n = 1;
foreach ($contents as $p => $v):
echo $p."<br/>";
$n++;
endforeach;
}
# find like file listing for s3 files
aws s3api --profile <<profile-name>> \
--endpoint-url=<<end-point-url>> list-objects \
--bucket <<bucket-name>> --query 'Contents[].{Key: Key}'
Versi Scala yang disederhanakan dan diperbarui oleh Paolo:
import scala.collection.JavaConversions.{collectionAsScalaIterable => asScala}
import com.amazonaws.services.s3.AmazonS3
import com.amazonaws.services.s3.model.{ListObjectsRequest, ObjectListing, S3ObjectSummary}
def buildListing(s3: AmazonS3, request: ListObjectsRequest): List[S3ObjectSummary] = {
def buildList(listIn: List[S3ObjectSummary], bucketList:ObjectListing): List[S3ObjectSummary] = {
val latestList: List[S3ObjectSummary] = bucketList.getObjectSummaries.toList
if (!bucketList.isTruncated) listIn ::: latestList
else buildList(listIn ::: latestList, s3.listNextBatchOfObjects(bucketList))
}
buildList(List(), s3.listObjects(request))
}
Melucuti obat generik dan menggunakan ListObjectRequest yang dihasilkan oleh pembuat SDK.
public static Dictionary<string, DateTime> ListBucketsByCreationDate(string AccessKey, string SecretKey)
{
return AWSClientFactory.CreateAmazonS3Client(AccessKey,
SecretKey).ListBuckets().Buckets.ToDictionary(s3Bucket => s3Bucket.BucketName,
s3Bucket => DateTime.Parse(s3Bucket.CreationDate));
}
Di PHP Anda bisa mendapatkan daftar lengkap objek AWS-S3 di dalam bucket tertentu menggunakan panggilan berikut
$S3 = \Aws\S3\S3Client::factory(array('region' => $region,));
$iterator = $S3->getIterator('ListObjects', array('Bucket' => $bucket));
foreach ($iterator as $obj) {
echo $obj['Key'];
}
Anda dapat mengarahkan output kode di atas ke file untuk mendapatkan daftar kunci.
Gunakan timah hitam untuk membungkus cli dan Anda akan memiliki sintaks yang jelas:
import plumbum as pb
folders = pb.local['aws']('s3', 'ls')
silakan coba skrip bash ini. ia menggunakan perintah curl tanpa perlu ketergantungan eksternal
bucket=<bucket_name>
region=<region_name>
awsAccess=<access_key>
awsSecret=<secret_key>
awsRegion="${region}"
baseUrl="s3.${awsRegion}.amazonaws.com"
m_sed() {
if which gsed > /dev/null 2>&1; then
gsed "$@"
else
sed "$@"
fi
}
awsStringSign4() {
kSecret="AWS4$1"
kDate=$(printf '%s' "$2" | openssl dgst -sha256 -hex -mac HMAC -macopt "key:${kSecret}" 2>/dev/null | m_sed 's/^.* //')
kRegion=$(printf '%s' "$3" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kDate}" 2>/dev/null | m_sed 's/^.* //')
kService=$(printf '%s' "$4" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kRegion}" 2>/dev/null | m_sed 's/^.* //')
kSigning=$(printf 'aws4_request' | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kService}" 2>/dev/null | m_sed 's/^.* //')
signedString=$(printf '%s' "$5" | openssl dgst -sha256 -hex -mac HMAC -macopt "hexkey:${kSigning}" 2>/dev/null | m_sed 's/^.* //')
printf '%s' "${signedString}"
}
if [ -z "${region}" ]; then
region="${awsRegion}"
fi
# Initialize helper variables
authType='AWS4-HMAC-SHA256'
service="s3"
dateValueS=$(date -u +'%Y%m%d')
dateValueL=$(date -u +'%Y%m%dT%H%M%SZ')
# 0. Hash the file to be uploaded
# 1. Create canonical request
# NOTE: order significant in ${signedHeaders} and ${canonicalRequest}
signedHeaders='host;x-amz-content-sha256;x-amz-date'
canonicalRequest="\
GET
/
host:${bucket}.s3.amazonaws.com
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:${dateValueL}
${signedHeaders}
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
# Hash it
canonicalRequestHash=$(printf '%s' "${canonicalRequest}" | openssl dgst -sha256 -hex 2>/dev/null | m_sed 's/^.* //')
# 2. Create string to sign
stringToSign="\
${authType}
${dateValueL}
${dateValueS}/${region}/${service}/aws4_request
${canonicalRequestHash}"
# 3. Sign the string
signature=$(awsStringSign4 "${awsSecret}" "${dateValueS}" "${region}" "${service}" "${stringToSign}")
# Upload
curl -g -k "https://${baseUrl}/${bucket}" \
-H "x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" \
-H "x-amz-Date: ${dateValueL}" \
-H "Authorization: ${authType} Credential=${awsAccess}/${dateValueS}/${region}/${service}/aws4_request,SignedHeaders=${signedHeaders},Signature=${signature}"
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.
-Browse to Folder
-Select All
-Generate Urls
Semoga beruntung untukmu.
boto.s3.bucketlistresultset.BucketListResultSet
alamat kondisi "puluhan ribu nama file" yang disebutkan dalam pertanyaan.