Je voudrais savoir s'il est possible de vérifier s'il y a certains fichiers dans un certain compartiment.
C'est ce que j'ai trouvé:
Vérification de la présence d'un fichier dans un compartiment S3 à l'aide de s3cmd
Cela devrait résoudre mon problème, mais pour une raison quelconque, il ne cesse de répéter que le fichier n'existe pas, alors qu'il existe. Cette solution est également un peu datée et n’utilise pas la méthode
doesObjectExist
.
Résumé de toutes les méthodes pouvant être utilisées dans le service Web Amazon S3
Cela donne la syntaxe d'utilisation de cette méthode, mais je n'arrive pas à le faire fonctionner.
S'attendent-ils à ce que vous créiez une variable booléenne pour enregistrer le statut de la méthode, ou la fonction vous donne-t-elle directement une sortie/une erreur?
C'est le code que 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 étant donné que l'erreur que je reçois est une erreur de syntaxe, je l'utilise probablement mal.
J'espère que quelqu'un pourra m'aider et me dire ce que je fais mal.
!Modifier
J'ai fini par chercher un autre moyen de faire cela car utiliser doesObjectExist
n'est pas le plus rapide ni le plus simple.
Un moyen simple consiste à utiliser aws s3 ls
exists=$(aws s3 ls $path_to_file)
if [ -z "$exists" ]; then
echo "it does not exist"
else
echo "it exists"
fi
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 existait. A l'aide de l'AWS cli qui serait la méthode head-object
, 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": {}
}
Notez que "aws s3 ls" ne fonctionne pas correctement, même si la réponse a été acceptée. Il recherche par préfixe et non par une clé d'objet spécifique. J'ai découvert cela à la dure quand quelqu'un renommait un fichier en ajoutant un «1» à la fin du nom de fichier, et le contrôle d'existence retournait toujours True.
(J'ai essayé d'ajouter ceci en tant que commentaire, mais je n'ai pas encore assez de représentants.)
Après @DaveMaple & @MichaelGlenn, voici la condition que j'utilise:
aws s3api head-object --bucket <some_bucket> --key <some_key> || not_exist=true
if [ $not_exist ]; then
echo "it does not exist"
else
echo "it exists"
fi