2017-01-26 2 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

이이 방법을 사용하는 방법의 구문을 제공하지만, 나는 그것이 작동 할 수없는 것.

그들은 당신이 부울 변수가 메소드의 상태를 저장 할 수 있도록 기대, 또는이 기능은 직접 당신에게 출력/오류가 발생을 주는가?

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

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

내가 파일의 이름을 사용하는 대신 전체 경로를 제공 그것을 테스트 :

내가 현재 내 bash는 스크립트에서 사용하고 코드입니다. 하지만 오류가 발생하기 때문에 구문 오류가 발생합니다. 아마도 잘못 사용했을 것입니다.

바라건대 누군가 나를 도울 수 있고 내가 잘못하고있는 것을 말해 줄 수 있기를 바랍니다.

! 내가 doesObjectExist를 사용하기 때문에이 작업을 수행하는 다른 방법을 찾고 결국

편집은 가장 빠르거나 쉬운 없습니다.

+2

하지 [이] (HTTP가 사용하고있는 AWS CLI를 사용하면 head-object 방법, 예를 들어이 될 것이라고 : //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 
관련 문제