2017-01-26 36 views
4

特定のバケットに特定のファイルがあるかどうかを確認することができますか。AWS S3:bashを使用してバケット内にファイルが存在するかどうかを確認する方法

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

それは私の問題を修正する必要がありますが、それがない一方で、いくつかの理由では、ファイルが存在しないことを返す保つ:

これは私が見つけたものです。この解決法も少し日付があり、doesObjectExistメソッドを使用しません。

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

これは、このメソッドを使用する方法の構文を与えますが、私はそれを動作させるように見えることはできません。

彼らは関数が直接エラーをスロー/あなたに出力を与えない、あなたがメソッドの状態を保存するためのブール変数を作ることを期待またはていますか?

これは、私は現在、私のbashスクリプトで使用しているコードです:

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

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

私はそれがファイル名のみを使用して、代わりのフルパスを与えてテストしました。しかし、私が得ているエラーは構文エラーであるため、おそらく間違っています。

誰かが私を助けて、私が間違っていることを教えてくれることを願っています。

!私はdoesObjectExistを使用しているので、これを行うための別の方法を探して終わった

編集は最速または最も簡単ではありません。

+2

を使用しているではありません[この](HTTP head-object方法、例だろうAWS CLIを使用して:/stackoverflow.com/a/18645756/1535071)あなたが探しているのは? – imTachu

+0

@TachúSalamancaはい、ありがとう!私はすぐに答えを読んで、私はファイルが存在するかどうかを確認する別の方法を探すつもりだと思う。 'doesBucketExist'メソッドを使うよりも速く簡単な方法があります。 –

答えて

2

最後にパフォーマンス比較を見たgetObjectMetadataは、オブジェクトが存在するかどうかを確認する最速の方法でした。返し

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

{ 
    "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

一つの簡単な方法は、aws s3 ls

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