2017-01-26 1 views
4

Je voudrais savoir s'il est possible de vérifier s'il y a certains fichiers dans un certain compartiment.AWS S3: Comment vérifier si un fichier existe dans un compartiment en utilisant bash

Voici ce que j'ai trouvé:

Checking if a file is in a S3 bucket using the s3cmd

Il faut résoudre mon problème, mais pour une raison quelconque, il revient sans cesse que le fichier n'existe pas, alors qu'il fait. Cette solution est également un peu datée et n'utilise pas la méthode doesObjectExist.

Summary of all the methods that can be used in the Amazon S3 web service

Cela donne la syntaxe de la façon d'utiliser cette méthode, mais je ne peux pas sembler le faire fonctionner.

ils vous attendent à faire une variable booléenne pour enregistrer l'état de la méthode, ou la fonction ne vous donne directement une sortie/lancer une erreur?

Ce code J'utilise actuellement dans mon script bash:

existBool=doesObjectExist(${BucketName}, backup_${DomainName}_${CurrentDate}.zip) 

if $existBool ; then 
     echo 'No worries, the file exists.' 
fi 

Je l'ai testé en utilisant uniquement le nom du fichier, au lieu de donner le chemin complet. Mais puisque l'erreur que j'obtiens est une erreur de syntaxe, je l'utilise probablement mal.

J'espère que quelqu'un peut m'aider et me dire ce que je fais mal.

! Modifier

J'ai fini par la recherche d'une autre façon de le faire puisque l'utilisation doesObjectExist n'est pas le plus rapide ou plus facile.

+2

est-ce pas [ce] (http : //stackoverflow.com/a/18645756/1535071) que cherchez-vous? – imTachu

+0

@ TachúSalamanca Genre de oui, merci! J'ai rapidement lu les réponses et je pense que je vais chercher un autre moyen de vérifier si les fichiers existent. Il y a probablement des façons de le faire plus rapidement et plus facilement que d'utiliser la méthode 'doesBucketExist'. –

Répondre

2

La dernière fois que j'ai vu des comparaisons de performances getObjectMetadata était le moyen le plus rapide de vérifier si un objet existe. En utilisant les cli AWS qui serait la méthode head-object, par exemple:

aws s3api head-object --bucket www.codeengine.com --key index.html 

qui retourne:

{ 
    "AcceptRanges": "bytes", 
    "ContentType": "text/html; charset=utf-8", 
    "LastModified": "Sun, 08 Jan 2017 22:49:19 GMT", 
    "ContentLength": 38106, 
    "ContentEncoding": "gzip", 
    "ETag": "\"bda80810592763dcaa8627d44c2bf8bb\"", 
    "StorageClass": "REDUCED_REDUNDANCY", 
    "CacheControl": "no-cache, no-store", 
    "Metadata": {} 
} 
5

Une façon simple utilise aws s3 ls

exists=$(aws s3 ls $path_to_file) 
if [ -z "$exists" ]; then 
    echo "it does not exist" 
else 
    echo "it exists" 
fi