J'ai téléchargé des dossiers dans mon compartiment s3, par exemple:
ObjectListing objects = conn.listObjects(bucket.getName()); do { for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) { System.out.println(objectSummary.getKey()); } objects = conn.listNextBatchOfObjects(objects); } while (objects.isTruncated());
ces répertoires (myfirstdir, myseconddir, mythrids) incluent également des sous-répertoires et aussi des fichiers simples
Comment puis-je lister ces répertoires par client Amazon S3, mais pas par sous-répertoires. Ce que je veux c'est juste le retour de
s3cmd ls s3: // my-bucket /
, il ne fait que lister les premiers fichiers ou répertoires de profondeur, mais pas de manière récursive
myfirstdir myseconddir mythirddir
J'ai essayé le code suivant , mais il a renvoyé chacun des fichiers et répertoires de manière récursive
s3cmd sync myfirstdir s3://my-bucket/myfirstdir/ s3cmd sync myseconddir s3://my-bucket/myseconddir/ s3cmd sync mythirddir s3://my-bucket/mythirddir/
3 Réponses :
S3 n'a pas de dossiers comme "objets physiques". Il y a un seau et vous y mettez des fichiers.
Chaque fichier a un chemin associé.
Il est maintenant vrai que si le chemin comporte une barre oblique ("/") dans son nom, il sera affiché dans les outils de l'interface utilisateur sous forme de dossier, mais cela ne fonctionne pas comme un système de fichiers "habituel".
Dans la documentation officielle, vous pouvez trouver un aperçu de son fonctionnement.
ListObjectsV2Result result = conn.listObjectsV2(new ListObjectsV2Request().withBucketName(bucket.getName()).withDelimiter("/")); for (String prefix : result.getCommonPrefixes()) { System.out.println(prefix); } I translate part of the code of this page: https://github.com/koblas/s3-cli/blob/master/cmd_ls.go to Java, so it can show only first level dirs under the bucket
Équivalent Python:
import boto3 s3_client = boto3.client('s3') response = s3_client.list_objects_v2(Bucket='my-bucket', Delimiter='/') for prefix in response['CommonPrefixes']: print(prefix['Prefix'])
Remarque: ces jours-ci, il est recommandé d'utiliser l ' AWS Command-Line Interface (CLI) plutôt que
s3cmd
. Il semblerait ques3cmd
n'ait pas eu de version pour 1.5 années.