İçinde on binlerce dosya adı bulunan bir amazon s3 kovam var. Gruptaki tüm dosya adlarını listeleyen bir metin dosyası almanın en kolay yolu nedir?
İçinde on binlerce dosya adı bulunan bir amazon s3 kovam var. Gruptaki tüm dosya adlarını listeleyen bir metin dosyası almanın en kolay yolu nedir?
Yanıtlar:
Boto kullanmanızı tavsiye ederim . Sonra hızlı bir çift python satırı :
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')
Bunu list.py kaydedin, bir terminal açın ve çalıştırın:
$ python list.py > results.txt
Aws s3 ls belgeleri
AWS son zamanlarda Komut Satırı Araçlarını yayınladı. Bu çok Boto gibi çalışır ve kullanarak monte edilebilir sudo easy_install awscliveyasudo pip install awscli
Yükledikten sonra,
aws s3 ls
Bu size mevcut tüm kovalarınızı gösterecek
CreationTime Bucket
------------ ------
2013-07-11 17:08:50 mybucket
2013-07-24 14:55:44 mybucket2
Daha sonra dosyalar için belirli bir grubu sorgulayabilirsiniz.
Komut :
aws s3 ls s3://mybucket
Çıktı :
Bucket: mybucket
Prefix:
LastWriteTime Length Name
------------- ------ ----
PRE somePrefix/
2013-07-25 17:06:27 88 test.txt
Bu size tüm dosyalarınızı gösterecektir.
--recursiveBelirtilen dizindeki tüm nesneleri görmek için bayrağı ekleyin
s3cmd bu tür şeyler için paha biçilmezdir
$ s3cmd ls -r s3://yourbucket/ | awk '{print $4}' > objects_in_bucket
s3cmdtarihe göre sıralanmış dosya adlarını döndürür. Sadece sonradan eklenen dosyaları söyletmek için herhangi bir yolu var 2015-10-23 20:46mı?
Dikkatli olun, amazon listesi sadece 1000 dosya döndürür. Tüm dosyalar üzerinde yineleme yapmak istiyorsanız, sonuçları işaretçileri kullanarak sayfalandırmanız gerekir:
Aws-s3 kullanarak yakut
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
son
Umarım bu yardımcı olur, vincent
Güncelleme 15-02-2019:
Bu komut size AWS S3'teki tüm kovaların bir listesini verecektir:
aws s3 ls
Bu komut size bir AWS S3 grubundaki tüm üst düzey nesnelerin bir listesini verecektir:
aws s3 ls bucket-name
Bu komut size bir AWS S3 grubundaki TÜM nesnelerin bir listesini verecektir:
aws s3 ls bucket-name --recursive
Bu komut, TÜMÜN listesini bir AWS S3 grubunun içine yerleştirir ... geçerli dizininizdeki bir metin dosyasına:
aws s3 ls bucket-name --recursive | cat >> file-name.txt
Scala geliştiricileri için, burada Java için resmi AWS SDK'yı kullanarak tam bir tarama yürütmek ve AmazonS3 grubunun içeriğini eşlemek yinelemeli bir işlevdir
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))
}
Yukarıdaki curried map()işlevi çağırmak için , önceden oluşturulmuş (ve düzgün başlatılmış) AmazonS3Client nesnesini ( Java API Başvurusu için resmi AWS SDK'sına bakın ), grup adını ve ilk parametre listesindeki önek adını iletmeniz yeterlidir . Ayrıca f(), ikinci parametre listesindeki her nesne özetini eşlemek için uygulamak istediğiniz işlevi iletin.
Örneğin
val keyOwnerTuples = map(s3, bucket, prefix)(s => (s.getKey, s.getOwner))
(key, owner)bu gruptaki / önekteki tuplesların tam listesini döndürür
veya
map(s3, "bucket", "prefix")(s => println(s))
İşlevsel Programlamada normalde Monads tarafından yaklaşacağınız gibi
mapped.toListöncekilerden herhangi biri olmadan geri döneracc
Bu konuda kullanabileceğiniz birkaç yol var. Python Kullanımı
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)
Başka bir yol bunun için AWS cli kullanmaktır
aws s3 ls s3://{bucketname}
example : aws s3 ls s3://testbucket133
s3 = boto3.resource('s3')
sessionyöntemdeki değişkenleri kullanmanız gerekmez . AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID'] AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
Zach sonra ben de boto tavsiye ederim , ama onun kodunda küçük bir fark yapmak gerekiyordu:
conn = boto.connect_s3('access-key', 'secret'key')
bucket = conn.lookup('bucket-name')
for key in bucket:
print key.name
conn.lookuphata Noneatmak yerine geri dönerS3ResponseError(NoSuchBucket)
aws s3api list-objects --bucket bucket-name
Daha fazla ayrıntı için buraya bakın - http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html
aws s3api list-objects --bucket <bucket-name>
İlk yapmak emin bir Hangi instance terminalve sahip all accessarasında S3yer IAMkullandığınız. Örneğin bir ec2 örneği kullandım.
pip3 install awscli
Ardından aws'ı yapılandırın
aws configure
Sonra dış referansları doldurun: -
$ 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)
Şimdi, tüm kovaları görün
aws s3 ls
Tüm kovaların adını sakla
aws s3 ls > output.txt
Tüm dosya yapısını bir grupta görün
aws s3 ls bucket-name --recursive
Dosya yapısını her grupta sakla
aws s3 ls bucket-name --recursive > file_Structure.txt
Bu yardımcı olur umarım.
AWS CLI, bir S3 kovasının tüm dosyalarını hızlı bir şekilde görmenize ve diğer işlemleri gerçekleştirmenize yardımcı olabilir.
AWS CLI'yi kullanmak için aşağıdaki adımları izleyin:
S3 grubunun tüm dosyalarını görmek için komutunu kullanın
aws s3 ls s3: // your_bucket_name - yinelenen
Farklı AWS hizmetleri için AWS cli kullanma referansı: https://docs.aws.amazon.com/cli/latest/reference/
Java'da anahtarları ListObjects kullanarak alabilirsiniz ( AWS belgelerine bakın )
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());
Müthiş "boto" lib kullanarak python kodlayın . Kod, bir gruptaki dosyaların listesini döndürür ve ayrıca eksik kovalar için özel durumları işler.
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() ]
<PLACE_HOLDERS> değerini değerlerinizle değiştirmeyi unutmayın.
Aşağıdaki komut tüm dosya adlarını AWS S3 grubunuzdan alır ve geçerli dizininizdeki metin dosyasına yazar:
aws s3 ls s3://Bucketdirectory/Subdirectory/ | cat >> FileNames.txt
Alternatif olarak Minio Client aka mc de kullanabilirsiniz. Açık Kaynak ve AWS S3 ile uyumludur. Bu kullanılabilir Linux, Windows, Mac, FreeBSD.
Tüm yapmanız gereken içeriği listelemek için mc ls komutunu çalıştırmaktır .
$ 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] 50 KB pi.png [2016-05-10 14:34:39 IST] 365KiB upton.pdf
Not:
Minio İstemci Linux'u Yükleme mc for:
chmod 755 $ $ ./mc --help
Minio Client ile AWS kimlik bilgilerini ayarlama
$ mc config ana bilgisayar ekle mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
Not: Lütfen mys3'ü bu hesap için istediğiniz takma adla değiştirin ve BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 ile AWS ACCESS-KEY ve SECRET-KEY
Umarım yardımcı olur.
Feragatname: Minio için çalışıyorum
Aws s3 grubundaki tüm dosyaları aşağıdaki komutu kullanarak listeleyebilirsiniz
aws s3 ls path/to/file
ve bir dosyaya kaydetmek için şunu kullanın:
aws s3 ls path/to/file >> save_result.txt
sonucunuzu başka bir dosyaya eklemek istiyorsanız:
aws s3 ls path/to/file > save_result.txt
daha önce yazılanları temizlemek istiyorsanız.
Hem Windows hem de Linux'ta çalışacaktır.
Javascript'te şunları kullanabilirsiniz:
s3.listObjects (params, function (err, sonuç) {});
tüm nesneleri kova içine almak için. kova adını params içine iletmeniz gerekir (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}'
Paolo'nun Scala cevabının basitleştirilmiş ve güncellenmiş versiyonu:
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))
}
Jeneriklerin çıkarılması ve SDK oluşturucuları tarafından oluşturulan ListObjectRequest'in kullanılması.
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));
}
PHP'de, aşağıdaki çağrıyı kullanarak belirli bir kova içindeki AWS-S3 nesnelerinin tam listesini alabilirsiniz
$S3 = \Aws\S3\S3Client::factory(array('region' => $region,));
$iterator = $S3->getIterator('ListObjects', array('Bucket' => $bucket));
foreach ($iterator as $obj) {
echo $obj['Key'];
}
Anahtarların listesini almak için yukarıdaki kodun çıktısını bir dosyaya yönlendirebilirsiniz.
Klibi sarmak için plumbum kullanın ve net bir sözdizimine sahip olacaksınız:
import plumbum as pb
folders = pb.local['aws']('s3', 'ls')
lütfen bu bash betiğini deneyin. herhangi bir harici bağımlılığa gerek olmadan curl komutunu kullanır
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}"
Çok kullanışlı bir metin dosyası almanın en kolay yolu S3 Tarayıcı http://s3browser.com/ indirmek ve tam bağlantı yollarının bir listesini üretmek için Web URLs Generator'ı kullanmaktır. Çok kullanışlıdır ve yaklaşık 3 tıklama içerir.
-Browse to Folder
-Select All
-Generate Urls
Size iyi şanslar.
boto.s3.bucketlistresultset.BucketListResultSetbelirtildiği gibi, soruda belirtilen "on binlerce dosya adı" koşuluna değiniyor .