2017-07-26 4 views
0

J'ai quelques problèmes en essayant de lister les fichiers correspondants dans un répertoire de mon s3 s3. J'ai utilisé un ls pour créer une liste de tous mes fichiers dans un répertoire spécifique (y compris les horodatages et les tailles de fichier) en ajoutant ceci à un nouveau fichier, par exemple aws s3 --profile mybucket1 ls s3://my-bucket1/directory1/directory2/ >> list.txt.Existe-t-il un moyen d'extraire des fichiers d'un compartiment s3 à l'aide de ls et de jokers? (aws cli)

Cela fonctionne à la fois rapidement et comme prévu. Cependant, j'ai aussi quelques fichiers dans directory1 que je veux aussi répertorier, mais seulement certains fichiers qui correspondent à une chaîne spécifique avec des caractères génériques autour d'elle.

Le plus proche que j'ai de réaliser ceci est d'utiliser cp (avec --exclude et --include) au lieu d'un ls, parce que ls ne vous permet pas d'utiliser les options --exclude ou --include, par exemple aws s3 --profile mybucket1 cp s3://my-bucket1/directory1/ /path/to/local/directory/ --exclude "*" --include "*match-me*" --recursive mais il faut encore une éternité pour copier un seul fichier (je n'ai pas de sortie standard car je crois qu'il scanne tout le répertoire à la recherche de la chaîne correspondante avant de copier quoi que ce soit). Je suis également incapable de supprimer --recursive car il me donne une erreur sans cela, même si je veux seulement copier des fichiers dans directory1. Ma préférence serait d'utiliser un ls pour cela car c'est beaucoup plus rapide et je n'ai pas besoin de faire un autre ls sur les fichiers téléchargés pour produire le même format que les fichiers que j'ai listés et ajoutés depuis directory2.

En outre, j'exécute toutes ces commandes dans un script bash, au cas où cela ferait une différence. J'espère que cela a du sens et si quelqu'un a des solutions possibles à ce problème, ce serait très apprécié.

+0

consultez la section "aide sync aws s3" – NauT

+2

Si vous souhaitez créer un site pour ce type de questions, suivez la proposition d'un [site dédié au Cloud Computing sur StackExchange] (https://area51.stackexchange.com/ propositions/110490/cloud-computing-aws-azur-google-openstack-etc? referrer = Gtut7wQSWPk88jFJz_zqMg2) et votez pour quelques exemples de questions. –

Répondre

1

Vous devriez regarder aws s3api list-objects

  1. Si votre modèle est au début de la clé et que vous voulez faire correspondre match-me*, vous pouvez utiliser les --prefix arguments:

    aws s3api list-objects --bucket <bucket> --prefix "match-me" 
    

    retournera toutes les clés commençant par match-me

  2. Si votre modèle est au milieu du nom de la clé et que vous voulez faire correspondre *match-me*, vous pouvez exécuter une requête sur les résultats:

    aws s3api list-objects --bucket test-bucket-fh --query "Contents[?contains(Key, 'match-me')]" 
    
+0

Notez également que list-objects ne renvoie que jusqu'à 1000 objets. – LHWizard

+0

@LHWizard correct, cela nécessite une pagination si vous avez plus de 1000 objets dans votre seau –

+0

@ FrédéricHenri J'ai exécuté cette commande, mais il faut beaucoup de temps pour donner un résultat. Je suppose que c'est parce qu'il analyse l'ensemble du compartiment avec la requête. Je vais voir combien de temps cela prendra pour fonctionner, mais je préférerais quelque chose de semblable à ce que j'ai écrit dans ma question, car il s'agit d'un processus très rapide, car il ne traverse pas tout le seau. – fep92

0

Si votre besoin de lister le contenu d'Amazon S3 est pas urgent (par exemple, faire une fois par jour), vous pouvez utiliser Amazon S3 Storage Inventory:

inventaire Amazon S3 fournit une des valeurs séparées par des virgules (CSV) sortie fichier plat de vos objets et leurs métadonnées correspondant sur un quotidien ou hebdomadaire pour un compartiment S3 ou un préfixe partagé (c'est-à-dire des objets dont le nom commence par une chaîne commune).

Il fournit un fichier quotidien/hebdomadaire dans Amazon S3 contenant une liste de tous les objets. Des charges supplémentaires s'appliquent.